Ich habe über den Pragma- Header auf Wikipedia gelesen, der besagt:
"Das Pragma: No-Cache-Header-Feld ist ein HTTP / 1.0-Header, der zur Verwendung in Anforderungen vorgesehen ist. Es ist ein Mittel für den Browser, dem Server und allen Zwischen-Caches mitzuteilen, dass er eine neue Version der Ressource möchte, nicht für den Server Einige Benutzeragenten achten in Antworten auf diesen Header, aber der HTTP / 1.1-RFC warnt ausdrücklich davor, sich auf dieses Verhalten zu verlassen. "
Aber ich habe nicht verstanden, was es tut? Was ist der Unterschied zwischen dem Cache-Control
Header, dessen Wert ist no-cache
und Pragma
dessen Wert auch ist no-cache
?
quelle
Pragma: no-cache
ist nur für Anfragen vorgesehen (dh "Ich möchte das Original, keine zwischengespeicherte Kopie"), und sein Verhalten ist für Antworten nicht angegeben.Cache-Control: no-cache
hat die gleiche Bedeutung für Anfragen, ist aber auch für Antworten definiert. Dies bedeutet "Wenn Sie in Zukunft eine zwischengespeicherte Kopie davon verwenden möchten, müssen Sie zuerst bei mir überprüfen, ob sie aktuell ist (dh eine erneute Validierung durchführen)".max-age
was das Caching nicht verhindert. Es legt nur ein Ablaufdatum dafür fest ...Es gibt keinen Unterschied, außer dass dies
Pragma
nur für die Anforderungen des Clients gilt, währendCache-Control
es sowohl von den Anforderungen der Clients als auch von den Antworten der Server verwendet werden kann.Was Standards betrifft, können sie nur aus der Sicht des Clients verglichen werden, der eine Anfrage stellt, und des Servers, der eine Anfrage vom Client empfängt. Die http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32 definiert das Szenario wie folgt:
So würde ich das oben lesen:
Wenn Sie einen Kunden schreiben und Folgendes benötigen
no-cache
:Pragma: no-cache
Sie es einfach in Ihren Anfragen, da Sie möglicherweise nicht wissen, obCache-Control
es vom Server unterstützt wird.Cache-Control
Wenn Sie einen Server schreiben:
Cache-Control
; Wenn nicht gefunden, suchen Sie nachPragma: no-cache
derCache-Control: no-cache
Logik und führen Sie sie aus .Cache-Control
.Natürlich kann die Realität anders sein als im RFC geschrieben oder impliziert!
quelle
Cache-Control: max-age=86400
undPragma: no-cache
? Welcher wird dann von den modernen Browsern geehrt?Pragma: no-cache
ist das nur für Anfragen vom Browser definiert, und es wäre daher völlig ungültig und undefiniert in Antworten vom Server an den Browser, z. B. würde ich mir vorstellen, dass jeder einzelne Browser (ob modern oder modern) not) sollte einen solchen Header in jeder Antwort ignorieren, die er möglicherweise erhält.Wenn es nach 1999 ist und Sie immer noch Expires oder Pragma verwenden , machen Sie es falsch.
Ich sehe dich an Stackoverflow:
tl; dr:
Pragma
ist ein Erbe von HTTP / 1.0 und wurde seit Internet Explorer 5 oder Netscape 4.7 nicht mehr benötigt. Es sei denn, Sie erwarten, dass einige Ihrer Benutzer IE5 verwenden: Es ist sicher, die Verwendung zu 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
quelle
Pragma
. (In HTTP / 1.0 wurde Pragma als erweiterbares Feld für implementierungsspezifische Anweisungen für Empfänger definiert. Diese Spezifikation lehnt solche Erweiterungen ab, um die Interoperabilität zu verbessern.)