Kaip tvarkyti tinklalapių talpyklą visose naršyklėse?

Mūsų tyrimai parodė, kad ne visos naršyklės vienodai gerbia „http“ talpyklos direktyvas.

Saugumo sumetimais nenorime, kad tam tikri mūsų paraiškos puslapiai būtų laikinai saugomi žiniatinklio naršyklėje. Tai turėtų veikti bent šiose naršyklėse:

  • „Internet Explorer 6 +“
  • „Firefox 1.5 +“
  • „Safari 3+“
  • Opera 9 +
  • „Chrome“

Mūsų paklausa kilo iš saugumo testo. Išsiregistravę iš mūsų svetainės galite spustelėti mygtuką „Atgal“ ir peržiūrėti talpykloje laikomus puslapius.

1257
08 сент. Edward Wilde 08 sept. 2008-09-08 15:08 '08, 15:08 2008-09-08 15:08
@ 26 atsakymai

Įvadas

Teisingas minimalus antraščių rinkinys, veikiantis su visais nurodytais klientais (ir įgaliotaisiais):

 Cache-Control: no-cache, no-store, must-revalidate Pragma: no-cache Expires: 0 

Cache-Control atitinka „HTTP 1.1“ specifikacijas klientams ir tarpiniams serveriams (ir netiesiogiai reikalauja kai kurie klientai šalia „ Expires ). Pragma atitinka HTTP 1.0 specifikaciją priešistoriniams klientams. Expires atitinka HTTP 1.0 ir 1.1 specifikacijas klientams ir įgaliotiniams. HTTP 1.1 sistemoje „ Cache-Control teikiama pirmenybė prieš „ Expires , todėl jis taikomas tik „HTTP 1.0“ tarpiniam serveriui.

Jei nesirūpinate IE6 ir jos sugadintu spartinimu, kai serviso puslapiai teikiami tik HTTPS no-store , galite praleisti Cache-Control: no-cache .

 Cache-Control: no-store, must-revalidate Pragma: no-cache Expires: 0 

Jei nesate suinteresuoti IE6 ir HTTP 1.0 klientais (HTTP 1.1 buvo pristatytas 1997 m.), Tada galite praleisti Pragma .

 Cache-Control: no-store, must-revalidate Expires: 0 

Jei jums nereikia HTTP 1.0 proxy serverių, galite praleisti laiką.

 Cache-Control: no-store, must-revalidate 

Kita vertus, jei serveris automatiškai įtraukia galiojantį Date antraštę, galite teoriškai praleisti „ Cache-Control ir pasikliauti tik „ Expires .

 Date: Wed, 24 Aug 2016 18:32:02 GMT Expires: 0 

Tačiau tai gali nepavykti, jei, pavyzdžiui, galutinis vartotojas manipuliuoja operacinės sistemos datą, o kliento programinė įranga remiasi tuo.

Kiti Cache-Control parametrai, pvz., max-age , nesvarbu, ar aukščiau nurodyti „ Cache-Control parametrai. Last-Modified antraštė, įtraukta į daugelį kitų atsakymų, yra įdomi tik tuo atveju, jei tikrai norite talpinti užklausą, taigi jums nereikia to visiškai nurodyti.

Kaip jį įdiegti?

Naudojant PHP:

 response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. response.setHeader("Pragma", "no-cache"); // HTTP 1.0. response.setHeader("Expires", "0"); // Proxies. 

Naudojant ASP.NET-MVC

 // 'response' is an instance of System.Net.Http.HttpResponseMessage response.Headers.CacheControl = new CacheControlHeaderValue { NoCache = true, NoStore = true, MustRevalidate = true }; response.Headers.Pragma.ParseAdd("no-cache"); // We can't use 'response.Content.Headers.Expires' directly // since it allows only 'DateTimeOffset?' values. response.Content?.Headers.TryAddWithoutValidation("Expires", 0.ToString()); 

Naudojant ASP.NET:

 Response.addHeader "Cache-Control", "no-cache, no-store, must-revalidate" ' HTTP 1.1. Response.addHeader "Pragma", "no-cache" ' HTTP 1.0. Response.addHeader "Expires", "0" ' Proxies. 

Ruby on Rails arba Python / Flask naudojimas:

 response["Cache-Control"] = "no-cache, no-store, must-revalidate" # HTTP 1.1. response["Pragma"] = "no-cache" # HTTP 1.0. response["Expires"] = "0" # Proxies. 

Naudojant Python / Pyramid:

 responseWriter.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") // HTTP 1.1. responseWriter.Header().Set("Pragma", "no-cache") // HTTP 1.0. responseWriter.Header().Set("Expires", "0") // Proxies. 

Naudojant „Apache“ .htaccess failą:

 <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="0" /> 

HTML meta žymos prieš HTTP atsakymų antraštes

Svarbu žinoti, kad kai HTML puslapis yra aptarnaujamas per HTTP ryšį, o antraštė yra tiek HTTP atsakymo antraštėse, tiek <meta http-equiv> HTML <meta http-equiv> , tada nurodoma HTTP atsakymo antraštėje , bus viršesnis už HTML meta žymeklį. HTML meta žymeklis bus naudojamas tik tuomet, kai puslapis bus peržiūrėtas iš vietinio disko failų sistemos per file:// URL. Taip pat žr. Skyrių W.3 HTML spec 5.2.2 . Užtikrinkite tai, kai nenurodote jų programiniu būdu, nes žiniatinklio serveryje gali būti tam tikrų numatytųjų reikšmių.

Paprastai, geriau nenurodykite HTML meta žymelių, kad išvengtumėte painiavos dėl starterių ir pasikliautumėte kietomis HTTP atsako antraštėmis. Be to, šios <meta http-equiv> žymos yra netinkamos HTML5. Leidžiama naudoti tik http-equiv reikšmes, nurodytas HTML5 specifikacijoje .

Faktinių HTTP atsakymų antraščių tikrinimas

Jei norite išbandyti abu, galite juos peržiūrėti / derinti žiniatinklio naršyklės kūrėjo įrankių rinkinio HTTP srauto monitoriuje. Jį galite pasiekti paspausdami „F12“, esantį „Chrome“ / „Firefox23“ + / IE9 +, tada atidarykite skirtuką „Tinklas“ arba „Ne“ ir spustelėkite „HTTP užklausą“, kad atskleistumėte visą informaciją apie HTTP užklausą ir atsakymą. Žemiau yra „ Chrome“ ekrano kopija :

2019

2174
15 янв. Atsakymą pateikė BalusC 15 sausis 2010-01-15 02:50 '10, 2:50, 2010-01-15 02:50

(Ei, viskas: prašome ne tik beprasmiškai nukopijuoti ir įklijuoti visas antraštes, kurias galite rasti)

Visų pirma, atgalinio mygtuko istorija nėra talpykla :

Šviežumo modelis (4.2 skirsnis) nebūtinai taikomas istorijos mechanizmams. Tai reiškia, kad istorijos mechanizmas gali rodyti ankstesnį vaizdą, net jei jis pasibaigęs.

Senajame HTTP specifikacijoje formuluotė buvo dar stipresnė, aiškiai nurodant naršyklėms ignoruoti mygtukų istorijos talpyklų direktyvas.

Grąžinimas turi būti grąžintas laiku (kol vartotojas prisijungs). Jis neperkeliamas į anksčiau atidarytą URL.

Tačiau praktikoje laikinoji atmintis gali paveikti atgalinį mygtuką ypatingomis aplinkybėmis:

  • Šis puslapis turi būti pristatytas per HTTPS , kitaip šis talpyklos perpildymas nebus patikimas. Be to, jei nenaudojate HTTPS, jūsų puslapis yra pažeidžiamas įvedimo vagystei daugeliu kitų tikslų.
  • Turite išsiųsti „ Cache-Control: no-store, must-revalidate (kai kurios naršyklės žiūri no-store , o kai kurie laikrodžiai must-revalidate )
border=0

Jums niekada nereikės:

  • <meta> su talpyklų antraštėmis - jis neveikia. Visiškai nenaudingas.
  • post-check / pre-check yra tik IE, kuri taikoma tik talpykloje saugomiems ištekliams.
  • Siunčiant tą pačią antraštę du ar dešimtis dalių. Kai kurie PHP fragmentai faktiškai pakeičia ankstesnes antraštes, todėl siunčiamas tik paskutinis.

Jei norite, galite pridėti:

  • no-cache arba „ max-age=0 , dėl kurių išteklius (URL) „pasenęs“ ir reikės naršyklių tikrinti su serveriu, jei naujesnė versija ( no-store jau reiškia, kad jis dar labiau).
  • Expires praeities data HTTP / 1.0 klientams (nors realūs HTTP / 1.0 klientai šių dienų neegzistuoja).

Premija: naujas HTTP talpyklos RFC .

207
31 марта '11 в 2:08 2011-03-31 02:08 atsakymą Kornel pateikė kovo 11 d. 11:08 2011-03-31 02:08

Kaip nurodė „porneL“, nenorite išjungti laikinosios atminties, bet išjungti istorijos buferį. Skirtingos naršyklės turi savo subtilius būdus, kaip išjungti istorijos buferį.

„Chrome“ (v28.0.1500.95 m) tai galime padaryti tik su „ Cache-Control: no-store .

„FireFox“ (v23.0.1), bet kuris iš jų veiks:

  • Cache-Control: no-store

  • Cache-Control: no-cache (tik „https“)

  • Pragma: no-cache (tik https)

  • Vary: * (tik https)

„Opera“ (v12.15), tai galime padaryti tik su „ Cache-Control: must-revalidate revalidate (tik https).

„Safari“ (v5.1.7, 7534.57.2) bet kuris iš jų veiks:

  • Cache-Control: no-store
    <body onunload=""> html

  • Cache-Control: no-store (tik „https“)

IE8 (v8.0.6001.18702IC), bet kuris iš jų veiks:

  • Cache-Control: must-revalidate, max-age=0

  • Cache-Control: no-cache

  • Cache-Control: no-store

  • Cache-Control: must-revalidate
    Expires: 0

  • Cache-Control: must-revalidate
    Expires: Sat, 12 Oct 1991 05:00:00 GMT

  • Pragma: no-cache (tik https)

  • Vary: * (tik https)

Pirmiau minėtas derinys suteikia mums tokį sprendimą, kuris veikia „Chrome 28“, „FireFox 23“, „IE8“, „Safari 5.1.7“ ir „Opera 12.15“: „ Cache-Control: no-store, must-revalidate (tik https)

Atkreipkite dėmesį, kad „https“ reikalingas, nes „Opera“ neišjungs istorijos buferio paprastiems http puslapiams. Jei tikrai negalite gauti „https“ ir esate pasirengę ignoruoti „Opera“, geriausias dalykas, kurį galite padaryti, yra šie:

 Cache-Control: no-store <body onunload=""> 

Toliau pateikiami mano bandymų šaltiniai:

„Http“:

  • Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    Klaida: Opera 12.15 Sėkmė: „Chrome 28“, „FireFox 23“, „IE8“, „Safari“ 5.1.7

  • Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    Klaida: Opera 12.15 Sėkmė: „Chrome 28“, „FireFox 23“, „IE8“, „Safari“ 5.1.7

  • Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    Crash: Safari 5.1.7, Opera 12.15 Sėkmė: „Chrome 28“, „FireFox 23“, „IE8“

  • Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    Crash: Safari 5.1.7, Opera 12.15 Sėkmė: „Chrome 28“, „FireFox 23“, „IE8“

  • Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    „Crash“: „Chrome“ 28, „FireFox 23“, „Safari“ 5.1.7, „Opera 12.15“ Sėkmė: IE8

  • Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    „Crash“: „Chrome“ 28, „FireFox 23“, „Safari“ 5.1.7, „Opera 12.15“ Sėkmė: IE8

  • Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    „Crash“: „Chrome“ 28, „FireFox 23“, „Safari“ 5.1.7, „Opera 12.15“ Sėkmė: IE8

  • Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    „Crash“: „Chrome“ 28, „FireFox 23“, „Safari“ 5.1.7, „Opera 12.15“ Sėkmė: IE8

  • Cache-Control: no-store
    Crash: Safari 5.1.7, Opera 12.15 Sėkmė: „Chrome 28“, „FireFox 23“, „IE8“

  • Cache-Control: no-store
    <body onunload="">
    Klaida: Opera 12.15 Sėkmė: „Chrome 28“, „FireFox 23“, „IE8“, „Safari“ 5.1.7

  • Cache-Control: no-cache
    „Crash“: „Chrome“ 28, „FireFox 23“, „Safari“ 5.1.7, „Opera 12.15“ Sėkmė: IE8

  • Vary: *
    Klaida: „Chrome“ 28, „FireFox 23“, „IE8“, „Safari“ 5.1.7, „Opera 12.15“ Sėkmė: nėra

  • Pragma: no-cache
    Klaida: „Chrome“ 28, „FireFox 23“, „IE8“, „Safari“ 5.1.7, „Opera 12.15“ Sėkmė: nėra

  • Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    „Crash“: „Chrome“ 28, „FireFox 23“, „Safari“ 5.1.7, „Opera 12.15“ Sėkmė: IE8

  • Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    „Crash“: „Chrome“ 28, „FireFox 23“, „Safari“ 5.1.7, „Opera 12.15“ Sėkmė: IE8

  • Cache-Control: must-revalidate, max-age=0
    „Crash“: „Chrome“ 28, „FireFox 23“, „Safari“ 5.1.7, „Opera 12.15“ Sėkmė: IE8

  • Cache-Control: must-revalidate
    Expires: 0
    „Crash“: „Chrome“ 28, „FireFox 23“, „Safari“ 5.1.7, „Opera 12.15“ Sėkmė: IE8

  • Cache-Control: must-revalidate
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    „Crash“: „Chrome“ 28, „FireFox 23“, „Safari“ 5.1.7, „Opera 12.15“ Sėkmė: IE8

  • Cache-Control: private, must-revalidate, proxy-revalidate, s-maxage=0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    Klaida: „Chrome“ 28, „FireFox 23“, „IE8“, „Safari“ 5.1.7, „Opera 12.15“ Sėkmė: nėra

Https:

  • Cache-Control: private, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    <body onunload="">
    Klaida: „Chrome“ 28, „FireFox 23“, „IE8“, „Safari“ 5.1.7, „Opera 12.15“ Sėkmė: nėra

  • Cache-Control: private, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    <body onunload="">
    Klaida: „Chrome“ 28, „FireFox 23“, „IE8“, „Safari“ 5.1.7, „Opera 12.15“ Sėkmė: nėra

  • Vary: *
    Klaida: „Chrome“ 28, „Safari 5.1.7“, „Opera 12.15“
    Sėkmė: FireFox 23, IE8

  • Pragma: no-cache
    Klaida: „Chrome“ 28, „Safari 5.1.7“, „Opera 12.15“
    Sėkmė: FireFox 23, IE8

  • Cache-Control: no-cache
    Klaida: „Chrome“ 28, „Safari 5.1.7“, „Opera 12.15“
    Sėkmė: FireFox 23, IE8

  • Cache-Control: private, no-cache, max-age=0, proxy-revalidate, s-maxage=0
    Klaida: „Chrome“ 28, „Safari 5.1.7“, „Opera 12.15“
    Sėkmė: FireFox 23, IE8

  • Cache-Control: private, no-cache, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    Klaida: „Chrome“ 28, „Safari 5.1.7“, „Opera 12.15“
    Sėkmė: FireFox 23, IE8

  • Cache-Control: private, no-cache, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    Klaida: „Chrome“ 28, „Safari 5.1.7“, „Opera 12.15“
    Sėkmė: FireFox 23, IE8

  • Cache-Control: must-revalidate
    Klaida: „Chrome“ 28, „FireFox 23“, „IE8“, „Safari“ 5.1.7
    Sėkmė: Opera 12.15

  • Cache-Control: private, must-revalidate, proxy-revalidate, s-maxage=0
    <body onunload="">
    Klaida: „Chrome“ 28, „FireFox 23“, „IE8“, „Safari“ 5.1.7
    Sėkmė: Opera 12.15

  • Cache-Control: must-revalidate, max-age=0
    Klaida: „Chrome 28“, „FireFox 23“, „Safari“ 5.1.7
    Sėkmė: IE8, Opera 12.15

  • Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    Klaida: „Chrome“ 28, „Safari“ 5.1.7
    Sėkmė: FireFox 23, IE8, Opera 12.15

  • Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    Klaida: „Chrome“ 28, „Safari“ 5.1.7
    Sėkmė: FireFox 23, IE8, Opera 12.15

  • Cache-Control: no-store
    Klaida: Opera 12.15 Sėkmė: „Chrome 28“, „FireFox 23“, „IE8“, „Safari“ 5.1.7

  • Cache-Control: private, no-cache, no-store, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    Klaida: Opera 12.15 Sėkmė: „Chrome 28“, „FireFox 23“, „IE8“, „Safari“ 5.1.7

  • Cache-Control: private, no-cache, no-store, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    Klaida: Opera 12.15 Sėkmė: „Chrome 28“, „FireFox 23“, „IE8“, „Safari“ 5.1.7

  • Cache-Control: private, no-cache
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    Klaida: „Chrome“ 28, „Safari 5.1.7“, „Opera 12.15“
    Sėkmė: FireFox 23, IE8

  • Cache-Control: must-revalidate
    Expires: 0
    Klaida: „Chrome“ 28, „FireFox 23“, „Safari 5.1.7“,
    Sėkmė: IE8, Opera 12.15

  • Cache-Control: must-revalidate
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Klaida: „Chrome“ 28, „FireFox 23“, „Safari 5.1.7“,
    Sėkmė: IE8, Opera 12.15

  • Cache-Control: private, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    <body onunload="">
    Klaida: „Chrome“ 28, „FireFox 23“, „Safari 5.1.7“,
    Sėkmė: IE8, Opera 12.15

  • Cache-Control: private, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    <body onunload="">
    Klaida: „Chrome“ 28, „FireFox 23“, „Safari 5.1.7“,
    Sėkmė: IE8, Opera 12.15

  • Cache-Control: private, must-revalidate
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    Klaida: „Chrome“ 28, „Safari“ 5.1.7
    Sėkmė: FireFox 23, IE8, Opera 12.15

  • Cache-Control: no-store, must-revalidate
    Sėkmė: „Chrome“ 28, „FireFox 23“, „IE8“, „Safari 5.1.7“, „Opera 12.15“

83
29 авг. atsakymas suteikiamas Pacerier 29 rug . 2013-08-29 19:50 '13, 19:50, 2013-08-29 19:50

Radau naudingą web.config maršrutą (bandžiau jį pridėti, tačiau neatrodė, kad tokiu būdu jis buvo priimtas)

 app.use(function(req, res, next) { res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate'); res.setHeader('Pragma', 'no-cache'); res.setHeader('Expires', '0'); next(); }); 
25
15 июня '12 в 5:40 2012-06-15 05:40 Juozapo Connolly atsakymas birželio 15 d. 12 d. 5:40 2012-06-15 05:40

Radau, kad visi šiame puslapyje pateikti atsakymai vis dar turėjo problemų. Visų pirma pastebėjau, kad nė vienas iš jų nesustabdys IE8 naudoti spartintą puslapio versiją, kai ji pasiekiama, spustelėję mygtuką „Atgal“.

Po daugelio tyrimų ir bandymų pastebėjau, kad tik dvi antraštės, kurias man tikrai reikėjo:

„Cache-Control“: nėra saugyklos
Vary: *

Norėdami paaiškinti „Vary“ pavadinimą, pasirinkite http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.6

„IE6-8“, „FF1.5-3.5“, „Chrome 2-3“, „Safari 4“ ir „Opera 9-10“ šios antraštės sukėlė puslapio užklausą iš serverio, kai spustelėjote puslapio nuorodą arba įdėjote URL tiesiai į adreso juostą. Tai apima 99% visų nuo sausio 10 d. Naudojamų naršyklių.

„IE6“ ir „Opera 9-10“, paspaudus mygtuką „Atgal“, toliau buvo įkelta laikinoji versija. Visose kitose išbandytose naršyklėse jie gavo naują versiją iš serverio. Iki šiol neradau vieno antraščių rinkinio, kuris priverstų šias naršykles, kad spusteliu mygtuką „Atgal“, ne grąžinti talpykloje esančių puslapių versijų.

Atnaujinti :. Rašę šį atsakymą, supratau, kad mūsų žiniatinklio serveris identifikuoja save kaip HTTP 1.0 serverį. Jūsų išvardytos antraštės yra teisingos, kad HTTP 1.0 serverio atsakymai nebūtų saugomi naršyklėse. HTTP 1.1 serveryje peržiūrėkite BalusC ataskaitą.

23
15 янв. Chris Vasselli atsakymas, pateiktas sausio 15 d 2010-01-15 02:35 '10, 2:35, 2010-01-15 02:35

Po šiek tiek tyrimų atlikome šį sąrašą antraščių, kurie, atrodo, apima daugumą naršyklių:

ASP.NET pridėjome juos naudodami šį fragmentą:

 Response.ClearHeaders(); Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1 Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1 Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1 Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1 Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0 Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.0 

Rasta: http://forums.asp.net/t/1013531.aspx

18
08 сент. Atsakymą pateikė Edward Wilde 08 Sep. 2008-09-08 15:11 '08 at 15:11 2008-09-08 15:11

Pragmos antraštės naudojimas atsakyme yra žmonų istorija. RFC2616 jį apibrėžia kaip užklausos antraštę.

http://www.mnot.net/cache_docs/#PRAGMA

8
17 сент. Dave Cheney atsakymas, pateiktas rugsėjo 17 d. 2008-09-17 17:18 '08, 17:18, 2008-09-17 17:18

IE6 yra klaida

Turinys, turintis „Content-Encoding: gzip“, visuomet yra saugomas, net jei naudojate „Cache-Control: no-cache“.

http://support.microsoft.com/kb/321722

Galite išjungti gzip kompresiją IE6 vartotojams (patikrinkite „MSIE 6“ naudotojo agentą)

7
13 июня '13 в 18:23 2013-06-13 18:23 atsakymą pateikė Edson Medina birželio 13 d., 13:23, 2013-06-13 18:23

ATSAKOMYBĖ: Aš primygtinai rekomenduoju perskaityti @BalusC atsakymą. Perskaičius šią spartinimo programą: http://www.mnot.net/cache_docs/ (taip pat rekomenduoju jį perskaityti), manau, kad tai teisinga. Tačiau dėl istorinių priežasčių (ir todėl, kad aš jas išbandžiau), į pradinį atsakymą įtrauksiu:


Bandžiau „priimtą“ atsakymą PHP, kuris man neveikė. Tada aš šiek tiek tyrinėjau, suradau mažą versiją, išbandžiau ir dirbo. Čia jis yra:

 header('Cache-Control: no-store, private, no-cache, must-revalidate'); // HTTP/1.1 header('Cache-Control: pre-check=0, post-check=0, max-age=0, max-stale = 0', false); // HTTP/1.1 header('Pragma: public'); header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past header('Expires: 0', false); header('Last-Modified: '.gmdate('D, d MYH:i:s') . ' GMT'); header ('Pragma: no-cache'); 

Tai turėtų veikti. Problema buvo ta, kad jei tą pačią antraštės dalį nustatysite du kartus, jei false nėra siunčiamas kaip antraštės funkcijos antrasis argumentas, antraštės funkcija tiesiog perrašo ankstesnį header() skambutį. Pavyzdžiui, nustatant, pavyzdžiui, „ Cache-Control , jei nenorite į visus skambučius įtraukti visus argumentus į funkcijų header() , tai turėtų daryti kažką panašaus:

 header('Cache-Control: this'); header('Cache-Control: and, this', false); 

Daugiau informacijos rasite čia .

7
18 сент. Steven Oxley atsakymas, pateiktas rugsėjo 18 d 2008-09-18 13:36 '08 13:36 pm 2008-09-18 13:36

Šios gairės nesumažina saugumo rizikos. Jie iš tikrųjų skirti UA atnaujinti nepastovią informaciją, o ne UA saugoti informaciją. Žr. Šį panašų klausimą . Bent jau nėra garantijos, kad nėra maršrutizatorių, proxy ar kt. Taip pat nebus ignoruojamos talpyklų direktyvos.

Teigiamai, kad politika dėl fizinės prieigos prie kompiuterių, programinės įrangos diegimo ir pan. Jei šios informacijos vartotojai yra visuomenės nariai, vienintelis dalykas, kurį galite iš tikrųjų padaryti, yra padėti jiems suprasti, kad kai tik informacija pasiekia savo automobilį, šis automobilis yra atsakomybė, o ne jūsų.

6
19 сент. Atsakymą pateikė Dustmanas 19 sep. 2008-09-19 06:08 '08, 06:08, 2008-09-19 06:08

Mano atveju, išsprendžiu chromo problemą

 <form id="form1" runat="server" autocomplete="off"> 

kur turiu išvalyti formos premiu turinį, kai naudotojai spustelės pelės mygtuką dėl saugumo priežasčių

6
19 июня '13 в 20:28 2013-06-19 20:28 atsakymą pateikė vartotojas2321638 „ Birželio 19 d. “ 13:28 2013-06-19 20:28

Jei susiduriate su problemomis įkeliant IE6-IE8 per SSL ir talpyklą: „No-cache“ antraštę (ir panašias vertes) su „MS Office“ failais, galite naudoti talpyklą: privatų, ne parduotuvės antraštę ir grąžinti failą POST užklausoje. Jis veikia.

6
21 сент. Atsakyti Albert 21 sep. 2012-09-21 12:02 '12 12:02 2012-09-21 12:02

„ASP.NET“ branduoliui sukurkite paprastą tarpinės programos klasę:

 public class NoCacheMiddleware { private readonly RequestDelegate m_next; public NoCacheMiddleware( RequestDelegate next ) { m_next = next; } public async Task Invoke( HttpContext httpContext ) { httpContext.Response.OnStarting( ( state ) => { // ref: http://stackoverflow.com/questions/49547/making-sure-a-web-page-is-not-cached-across-all-browsers httpContext.Response.Headers.Append( "Cache-Control", "no-cache, no-store, must-revalidate" ); httpContext.Response.Headers.Append( "Pragma", "no-cache" ); httpContext.Response.Headers.Append( "Expires", "0" ); return Task.FromResult( 0 ); }, null ); await m_next.Invoke( httpContext ); } } 

tada užregistruokite jį su Startup.cs

 app.UseMiddleware<NoCacheMiddleware>(); 

Įsitikinkite, kad jį pridėjote kažkur po

 app.UseStaticFiles(); 
6
19 мая '16 в 22:55 2016-05-19 22:55 atsakymą pateikė kspearrin , gegužės 19 d. 16, 10:55 2016-05-19 22:55

Antraštės funkcijos PHP dokumentacija turi gana išsamų pavyzdį (kurį pateikė trečioji šalis):

  header('Pragma: public'); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past header('Last-Modified: '.gmdate('D, d MYH:i:s') . ' GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); // HTTP/1.1 header('Cache-Control: pre-check=0, post-check=0, max-age=0', false); // HTTP/1.1 header ("Pragma: no-cache"); header("Expires: 0", false); 
6
08 сент. atsakymą pateikė Gray Panther 08 sep. 2008-09-08 15:19 '08 at 15:19 2008-09-08 15:19

HTTP 1.1 RFC sako, kad teisingas būdas yra pridėti HTTP antraštę:

„Cache-Control“: ne talpykla

Senesnės naršyklės tai gali ignoruoti, jei nesilaiko HTTP 1.1. Jiems galite pabandyti antraštę:

Pragma: ne-cache

Tai turėtų veikti ir HTTP 1.1 naršyklėse.

6
08 сент. Atsakymas, kurį pateikė Chris Dail Sep 08 2008-09-08 15:14 '08, 15:14, 2008-09-08 15:14

1995 m. Pakeistos „http“ antraštės nustatymas tam tikrą dieną paprastai yra triukas.

Štai pavyzdys:

 Pasibaigia: Trečiadienis, 1995 m. Lapkričio 15 d. 04:58:08 GMT Paskutinį kartą modifikuota: penktadienis, 1995 m. Lapkričio 15 d. 04:58:08 GMT „Cache-Control“: ne-talpykla, privaloma atnaujinti
5
08 сент. Anders Sandvig atsakymas, rugsėjo 08 d 2008-09-08 15:10 '08, 15:10, 2008-09-08 15:10

Aš turėjau geriausius ir nuoseklesnius rezultatus visose naršyklėse, nustatydamas „Pragma“: ne-cache

4
Atsakymą pateikia petr k. Rugsėjo 17 d 2008-09-17 15:32 '08 at 15:32 2008-09-17 15:32

BalusC pateiktos atsakymų antraštės netrukdo „Safari 5“ (ir galbūt senesnėms versijoms) rodyti naršyklės talpyklos turinį naudojant naršyklės atgalinį mygtuką. Tokiu būdu neleidžiama pridėti tuščio „onunload“ įvykio tvarkytojo atributo į kūno žymę:

 <body onunload=""> 

Этот хак, по-видимому, разбивает кеш обратно-назад в Safari: Есть ли кросс-браузерное событие onload при нажатии кнопки "Назад" ?

4
ответ дан Tobias 24 апр. '11 в 0:24 2011-04-24 00:24

Кроме того, для хорошей меры убедитесь, что вы reset ExpiresDefault в вашем файле .htaccess , если вы используете это для включения кэширования.

 ExpiresDefault "access plus 0 seconds" 

Впоследствии вы можете использовать ExpiresByType для установки определенных значений для файлов, которые вы хотите кэшировать:

 ExpiresByType image/x-icon "access plus 3 month" 

Это может также пригодиться, если ваши динамические файлы, например. php и т.д. кэшируются браузером, и вы не можете понять, почему. Проверьте ExpiresDefault .

4
ответ дан Obinwanne Hill 19 авг. '16 в 23:47 2016-08-19 23:47