Welke aanvragen zijn browsers ‘F5’ en “Ctrl + F5” vernieuwen?

Is er een standaard voor welke acties F5 en CTRL + F5 Trigger in webbrowsers?

Ik heb ooit experiment in IE6 en Firefox 2.x. De F5 Vernieuwen zou een HTTP-verzoek naar de server worden verzonden met een If-Modified-Sincekoptekst, terwijl CTRL + F5 < / kbd>zou niet zo'n header hebben. In mijn begrip zal F5 zo veel mogelijk in de cache-inhoud gebruiken, terwijl CTRL + F5 is bedoeld om alle cache-inhoud te verlaten en gewoon Haal alle inhoud opnieuw van de servers op.

Maar vandaag merkte ik dat in sommige van de nieuwste browsers (Chrome, IE8) het niet meer op deze manier werkt. Zowel F5 en CTRL + F5 Stuur de If-Modified-Sinceheader.

Dus hoe zou dit moeten werken, of (als er geen standaard is) Hoe verschillen de grote browsers in hoe ze deze vernieuwende kenmerken implementeren?


Antwoord 1, Autoriteit 100%

Over het algemeen:

F5 Kan u dezelfde pagina geven, zelfs als de inhoud is gewijzigd, omdat deze de pagina van de cache kan laden. Maar CTRL + F5 dwingt een cache verversen en garandeert dat als de inhoud is gewijzigd, u de nieuwe inhoud krijgt.


Antwoord 2, Autoriteit 160%

Het is aan de browser, maar ze gedragen zich op vergelijkbare manieren.

F5 werkt de pagina alleen bij als deze is gewijzigd. Moderne browsers stuurt Cache-Control: max-age=0Om elke cache de maximale hoeveelheid tijd te vertellen dat een bron wordt beschouwd als vers, ten opzichte van het tijdstip van het verzoek.

CTRL - F5 wordt gebruikt om een ​​update te forceren, waarbij de cache wordt benadrukt. Moderne browsers stuurt Cache-Control: no-cacheen Pragma: No-cache

Als ik me goed herinner, was het Netscape, de eerste browser die ondersteuning voor cache-control toevoegde door Pragma: No-cachetoe te voegen toen je op CTRL-F5.

┌───────────┬──────────────┬─────┬─────────────────┬──────────────────────────────┐
│ Version 4 │      F5      │  R  │      CLICK      │ Legend:                      │
│2021 MAY 19├──┬──┬──┬──┬──┼──┬──┼──┬──┬──┬──┬──┬──┤ C = Cache-Control: no-cache  │
│           │  │S │C │A │A │C │C │  │S │C │A │A │C │ I = If-Modified-Since        │
│           │  │H │T │L │L │T │T │  │H │T │L │L │T │ M = Cache-Control: max-age=0 │
│           │  │I │R │T │T │R │R │  │I │R │T │T │R │ N = Not tested               │
│           │  │F │L │  │G │L │L │  │F │L │  │G │L │ P = Pragma: No-cache         │
│           │  │T │  │  │R │  │+ │  │T │  │  │R │+ │ - = ignored                  │
│           │  │  │  │  │  │  │S │  │  │  │  │  │S │                              │
│           │  │  │  │  │  │  │H │  │  │  │  │  │H │ With 'CLICK' I refer to a    │
│           │  │  │  │  │  │  │I │  │  │  │  │  │I │ mouse click on the browsers  │
│           │  │  │  │  │  │  │F │  │  │  │  │  │F │ refresh-icon.                │
│           │  │  │  │  │  │  │T │  │  │  │  │  │T │                              │
│           │  │  │  │  │  │  │  │  │  │  │  │  │  │ 1: Version 3.0.6 sends I     │
├───────────┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤    and C, but 3.1.6 opens    │
│Brave 1.24 │M │CP│CP│- │- │M │CP│M │CP│CP│M │CP│CP│    the page in a new tab,    │
├───────────┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤    making a normal request   │
│Chrome 1   │MI│MI│MI│- │- │MI│- │MI│MI│MI│MI│MI│N │    with only I.              │
│Chrome 6   │MI│CP│CP│- │- │MI│CP│MI│CP│CP│MI│- │N │ 2: Version 10.62 does        │
│Chrome 90  │M │CP│CP│- │- │M │CP│M │CP│CP│M │CP│CP│    nothing. 9.61 might do C  │
├───────────┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤    unless it was a typo in   │
│Edge 90    │M │CP│CP│- │- │M │CP│M │CP│CP│M │CP│CP│    my old table.             │
├───────────┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤ 3: Opens the currernt tab in │
│Firefox 3.x│MI│- │CP│- │- │MI│CP│MI│CP│1 │M │MI│N │    a new tab, but does not   │
│Firefox 89 │M │- │CP│- │M │M │CP│M │CP│3 │M │M │3 │    refresh the page if it is │
├───────────┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤    cached in the browser.    │
│MSIE 8, 7  │I │- │C │- │I │I │  │I │I │C │I │I │N │                              │
├───────────┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤                              │
│Opera 10, 9│C │- │- │2 │- │C │- │C │C │C │C │- │N │                              │
│Opera 76   │M │CP│CP│- │- │M │- │M │CP│CP│M │CP│CP│                              │
├───────────┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──────────────────────────────┤
│                    https://stackoverflow.com/a/385491/36866                     │
└─────────────────────────────────────────────────────────────────────────────────┘

Opmerking over Chrome 6.0.472: als u geforceerd opnieuw laadt (zoals CTRL-F5), gedraagt het zich alsof de url intern gemarkeerd om altijd geforceerd te herladen. De vlag wordt gewist als u naar de adresbalk gaat en op enter drukt.


Antwoord 3, autoriteit 21%

Ik heb een browser-compatibele pagina geïmplementeerd om vernieuwingsgedrag van browser(hier is de broncode) en krijg resultaten vergelijkbaar met @some, maar voor moderne browsers:


Antwoord 4, autoriteit 3%

Tenminste in Firefox (v3.5) lijkt de cache uitgeschakeldte zijn in plaats van gewoon te worden gewist. Als er meerdere exemplaren van dezelfde afbeelding op een pagina staan, wordt deze meerdere keren overgedragen. Dat is ook het geval voor img-tags die vervolgens via Ajax/JavaScript worden toegevoegd.

Dus als je je afvraagt waarom de browser hetzelfde kleine pictogram een paar honderd keer blijft downloaden op je Ajax-site voor automatisch vernieuwen, komt dat omdat je de pagina in eerste instantie hebt geladen met CTRL-F5.


Antwoord 5

IE7/8/9 lijkt zich anders te gedragen, afhankelijk van of de pagina focus heeft of niet.

Als u op de pagina klikt en CTRL+F5dan wordt "Cache-Control: no-cache" opgenomen in de verzoekheaders. Als u in de locatie-/adresbalk klikt en vervolgens op CTRL+F5drukt, is dit niet het geval.


Antwoord 6

Als de gebruiker op F5drukt, hoewel het nieuwe verzoek naar de webserver gaat en ook een reactie op het verzoek krijgt. Maar wanneer de responsheader is geparseerd, controleert deze de vereiste informatie in de browsercache. Als de vereiste informatie in de cache niet is verlopen, wordt die informatie hersteld vanuit de cache zelf.

Wanneer de gebruiker op CTRL-F5klikt, zelfs dan gaat een nieuw verzoek naar de webserver en krijgt een reactie. Maar deze keer, wanneer de responsheader is geparseerd, controleert deze geen vereiste informatie in de cache en brengt alleen alle bijgewerkte informatie van de server mee.

Other episodes