Ich habe über den Pragma Header auf Wikipedia gelesen, der besagt:
"Das Feld" Pragma: No-Cache-Header "ist ein HTTP/1.0-Header, der für die Verwendung in Anforderungen vorgesehen ist. Es dient dem Browser dazu, dem Server und allen Zwischen-Caches mitzuteilen, dass eine neue Version der Ressource gewünscht wird, nicht für den Server Einige Benutzerprogramme beachten diesen Header in Antworten, der HTTP/1.1-RFC warnt jedoch ausdrücklich davor, sich auf dieses Verhalten zu verlassen. "
Aber ich habe nicht verstanden, was es tut? Was ist der Unterschied zwischen dem Header Cache-Control
, Dessen Wert no-cache
Ist, und Pragma
, dessen Wert ebenfalls no-cache
Ist?
Pragma
ist die HTTP/1.0-Implementierung und cache-control
ist die HTTP/1.1-Implementierung desselben Konzepts. Sie sollen beide verhindern, dass der Client die Antwort zwischenspeichert. Ältere Clients unterstützen HTTP/1.1 möglicherweise nicht, weshalb dieser Header noch verwendet wird.
Es gibt keinen Unterschied, außer dass Pragma
nur für die Anforderungen des Clients definiert ist, während Cache-Control
Sowohl für die Anforderungen der Clients als auch für die Antworten der Server verwendet werden kann.
Standardmäßig können sie also nur aus der Perspektive verglichen werden, dass der Client eine Anfrage stellt und der Server eine Anfrage vom Client erhält. Das http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32 definiert das Szenario wie folgt:
HTTP/1.1-Caches SOLLTEN "Pragma: no-cache" so behandeln, als hätte der Client "Cache-Control: no-cache" gesendet. In HTTP werden keine neuen Pragma-Direktiven definiert.
Note: because the meaning of "Pragma: no-cache as a response header field is not actually specified, it does not provide a reliable replacement for "Cache-Control: no-cache" in a response
So würde ich das oben lesen:
wenn Sie einen Client schreiben und no-cache
benötigen:
Pragma: no-cache
in Ihren Anfragen, da Sie möglicherweise nicht wissen, ob Cache-Control
vom Server unterstützt wird.Cache-Control
wenn Sie einen Server schreiben:
Cache-Control
; Wenn nicht gefunden, prüfen Sie, ob Pragma: no-cache
vorhanden ist, und führen Sie die Logik Cache-Control: no-cache
aus.Cache-Control
ein.Natürlich könnte die Realität anders aussehen als in der RFC geschrieben oder impliziert!
| Stop using | Replaced with |
| (HTTP 1.0) | (HTTP 1.1 - 1999) |
|---------------------|----------------------------------|
| Expires: [date] | Cache-Control: max-age=[seconds] |
| Pragma: no-cache | Cache-Control: no-cache |
Wenn es nach 1999 ist und Sie immer noch Expires oder Pragma verwenden, machen Sie es falsch.
Ich schaue dich an Stackoverflow:
200 OK Pragma: no-cache Content-Type: application/json X-Frame-Options: SAMEORIGIN X-Request-Guid: a3433194-4a03-4206-91ea-6a40f9bfd824 Strict-Transport-Security: max-age=15552000 Content-Length: 54 Accept-Ranges: bytes Date: Tue, 03 Apr 2018 19:03:12 GMT Via: 1.1 varnish Connection: keep-alive X-Served-By: cache-yyz8333-YYZ X-Cache: MISS X-Cache-Hits: 0 X-Timer: S1522782193.766958,VS0,VE30 Vary: Fastly-SSL X-DNS-Prefetch-Control: off Cache-Control: private
tl; dr: Pragma
ist ein Erbe von HTTP/1.0 und wird seit Internet Explorer 5 oder Netscape 4.7 nicht mehr benötigt. Wenn Sie nicht erwarten, dass einige Ihrer Benutzer IE5 verwenden, können Sie die Verwendung sicher beenden.
[date]
(veraltet - HTTP 1.0) [seconds]
Und die bedingten Anfragen:
Etag: W/“1d2e7–1648e509289”
If-None-Match: W/“1d2e7–1648e509289”
304 Not Modified
last-modified: Thu, 09 May 2019 19:15:47 GMT
If-Modified-Since: Fri, 13 Jul 2018 10:49:23 GMT
304 Not Modified
letzte Änderung: Do, 09. Mai 2019 19:15:47 GMT