Какие заголовки я хочу отправить вместе с ответом 304?

StackOverflow https://stackoverflow.com/questions/691318

Вопрос

Когда я отправляю ответ 304.Как браузер будет интерпретировать другие заголовки, которые я отправляю вместе с 304?

Например.

header("HTTP/1.1 304 Not Modified");
header("Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT");

Будет ли это гарантировать, что браузер не отправит еще один условный запрос GET (или какой-либо другой запрос) до тех пор, пока время $offset не «истечет»?

А как насчет других заголовков?

Должен ли я отправлять такие заголовки вместе с 304:

header('Content-Type: text/html');

Должен ли я отправить:

header("Last-Modified:" . $modified);
header('Etag: ' . $etag);

Чтобы убедиться, что браузер отправляет условный запрос GET в следующий раз, когда $offset «исчерпается», или он просто сохраняет старые значения Last Modified и Etag?

Есть ли еще вещи, о которых мне следует знать при отправке заголовка ответа 304?

Это было полезно?

Решение

Этот Сообщение блога мне очень помогло приручить зверя "условного получения".

Интересный отрывок (который частично противоречит ответу Бена) гласит:

Если обычный ответ включал бы заголовок ETag, этот заголовок также должен быть включен в ответ 304.

Кэшируйте заголовки (Expires, Cache-Control и/или Vary), если их значения могут отличаться от значений, отправленных в предыдущем ответе.

Это полностью соответствует RFC 2616 раздел 10.3.5.


Ниже 200 запросов...

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

...И его оптимальный действительный аналог 304.

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

Обратите внимание, что Expires заголовок не более Current Date + One Year согласно RFC-2616 14.21.

Другие советы

А Content-Type заголовок применяется только к ответам, содержащим тело.Ответ 304 делает нет содержать тело, поэтому заголовок не применяется.Точно так же вы не хотите отправлять Last-Modified или ETag потому что ответ 304 означает, что документ не изменился (и поэтому не изменились значения этих двух заголовков).

Для примера см. это сообщение в блоге Анны ван Кестерен изучение WordPress' http_modified функция.Обратите внимание, что он возвращает или Last-Modified и ETag или 304 ответ.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top