w3schools que index content php http-headers get http-status-code-304

que - php header location);



¿Qué encabezados quiero enviar junto con una respuesta 304? (2)

Cuando envío una respuesta 304. ¿Cómo interpretará el navegador otros encabezados que envío junto con el 304?

P.ej

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

¿Esto asegurará que el navegador no envíe otra solicitud GET condicional (ni ninguna solicitud) hasta que el tiempo $ offset se haya "agotado"?

Además, ¿qué pasa con otros encabezados?

¿Debo enviar encabezados como este junto con el 304?

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

Tengo que enviar:

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

¿Para asegurarse de que el navegador envíe una solicitud GET condicional la próxima vez que se haya agotado el $ offset o simplemente guarde los antiguos valores Last Modified y Etag?

¿Hay otras cosas que debería tener en cuenta al enviar un encabezado de respuesta 304?


El encabezado Content-Type solo se aplica a las respuestas que contienen un cuerpo. Una respuesta 304 no contiene un cuerpo, por lo que ese encabezado no se aplica. Del mismo modo, no desea enviar Last-Modified o ETag porque una respuesta 304 significa que el documento no ha cambiado (y, por lo tanto, tampoco tienen los valores de esos dos encabezados).

Para un ejemplo, vea esta publicación de blog de Anne van Kesteren que examina la función http_modified WordPress . Tenga en cuenta que devuelve Last-Modified y ETag o una respuesta 304.


Esta publicación en el blog me ayudó mucho para domesticar a la bestia "obtener condicional".

Un extracto interesante (que contradice parcialmente la respuesta de Ben) dice que:

Si una respuesta normal hubiera incluido un encabezado ETag, ese encabezado también debe incluirse en la respuesta 304.

Los encabezados de caché (Caduca, Cache-Control y / o Variar), si sus valores pueden diferir de los enviados en una respuesta anterior.

Esto está en completo acuerdo con el RFC 2616 sec 10.3.5 .

Por debajo de una solicitud de 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

... Y su contraparte válida de 304 es válida.

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

Tenga en cuenta que el encabezado Expires es como máximo Current Date + One Year según RFC-2616 14.21 .