Welche Header kann ich zusammen mit einem 304-Antwort senden möchten?
-
22-08-2019 - |
Frage
Wenn ich eine 304-Antwort senden. Wie wird sich der Browser andere Header interpretieren, die ich zusammen mit dem 304 senden?
z.
header("HTTP/1.1 304 Not Modified");
header("Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT");
Wird dies sicherstellen, dass nicht ein anderen bedingten GET-Request (noch irgendeine Anfrage) bis $ offset Zeit "run out"?
Bitte senden Sie den BrowserAuch was ist mit anderen Header?
Soll ich Header wie diese zusammen mit den 304 senden:
header('Content-Type: text/html');
Muss ich an:
header("Last-Modified:" . $modified);
header('Etag: ' . $etag);
Um sicherzustellen, dass der Browser eine bedingte GET-Anforderung das nächste Mal sendet der Offset $ hat „run out“ oder ist es einfach speichern die alte Last Modified und Etag Werte?
Gibt es andere Dinge, die ich sollte über sich bewusst sein, wenn eine 304-Antwort-Header zu senden?
Lösung
Das Blog-Post mich viel, um dazu beigetragen, die „bedingten get“ Tier zu zähmen .
Ein interessanter Auszug (die im Widerspruch zum Teil Ben Antwort) heißt es:
Wenn eine normale Reaktion einen ETag Header enthalten habe, muss dieser Header auch in der 304-Antwort aufgenommen werden.
Cache-Headern (laufen, Cache-Control und / oder zu variieren), wenn ihre Werte von den in einer früheren Antwort gesendet abweichen.
Dies ist in völliger Übereinstimmung mit dem RFC 2616 sec 10.3.5 .
Unter einer 200 Anfrage ...
HTTP/1.1 200 OK
Server: nginx/0.8.52
Date: Thu, 18 Nov 2010 16:04:38 GMT
Content-Type: image/png
Last-Modified: Thu, 15 Oct 2009 02:04:11 GMT
Expires: Thu, 31 Dec 2010 02:04:11 GMT
Cache-Control: max-age=315360000
Accept-Ranges: bytes
Content-Length: 6394
Via: 1.1 proxyIR.my.corporate.proxy.name:8080 (IronPort-WSA/6.3.3-015)
Connection: keep-alive
Proxy-Connection: keep-alive
X-Junk: xxxxxxxxxxxxxxxx
... Und sein optimales gültiges 304-Pendant.
HTTP/1.1 304 Not Modified
Server: nginx/0.8.52
Date: Thu, 18 Nov 2010 16:10:35 GMT
Expires: Thu, 31 Dec 2011 16:10:35 GMT
Cache-Control: max-age=315360000
Via: 1.1 proxyIR.my.corporate.proxy.name:8080 (IronPort-WSA/6.3.3-015)
Connection: keep-alive
Proxy-Connection: keep-alive
X-Junk: xxxxxxxxxxx
Hinweis , dass der Expires
Header ist höchstens Current Date + One Year
per RFC-2616 14.21 .
Andere Tipps
Der Content-Type
Header gilt nur für Antworten, die einen Körper enthalten. A-304-Antwort tut nicht enthält einen Körper, so dass die Header nicht gilt. In ähnlicher Weise wollen Sie nicht Last-Modified
oder ETag
senden, weil eine 304-Antwort bedeutet, dass das Dokument nicht verändert hat (und so weder die Werte dieser beiden Header).
Ein Beispiel finden Sie unter Blog-Beitrag von Anne van Kesteren Prüfung Wordpress ‘http_modified
Funktion. Beachten Sie, dass es gibt entweder Last-Modified
und ETag
oder eine 304-Antwort.