http http-headers http-1.1

¿Qué significa el encabezado HTTP If-None-Match:*mean?



http-headers http-1.1 (2)

Citando de RFC 2616 (HTTP 1.1) :

... si se da "*" y existe una entidad actual para ese recurso, entonces el servidor NO DEBE realizar el método solicitado, a menos que se requiera porque la fecha de modificación del recurso no coincide con la proporcionada en un If-Modified-Since campo de encabezado en la solicitud.

El RFC continúa diciendo que en lugar de realizar la solicitud, los servidores deben responder con 304 (no modificado) para solicitudes GET y HEAD, y que deben responder con 412 (condición previa no) para todos los demás tipos de solicitud. Pero eso es solo si el servidor realmente tiene alguna versión del recurso solicitado. Si no tiene ninguna entidad, entonces debe manejar la solicitud (probablemente con un 404 ya que no tiene nada).

Para manejar una solicitud, primero averigüe qué haría el servidor si ese encabezado no estuviera presente. Si el resultado de esa solicitud no fuera 2xx o 304, envíe la solicitud como de costumbre. Pero si el resultado de la solicitud sería 2xx o 304, maneje el caso If-None-Modified. Cuando es una estrella, simplemente devuelve 304 inmediatamente (a menos que sea superado por If-Modified-Since). Si se trata de una o más etiquetas de entidad, compruebe si alguna de esas etiquetas coincide con la etiqueta de lo que estaba planeando servir como respuesta. Si hay alguna coincidencia, devuelva 304; si no hay coincidencia, entonces sírvela como lo harías normalmente.

Más adelante en el RFC, hay más:

El significado de "If-None-Match: *" es que el método NO DEBE realizarse si la representación seleccionada por el servidor de origen (o por un caché, posiblemente utilizando el mecanismo Vary, consulte la sección 14.44 ) existe, y DEBE realizarse si la representación no existe Esta función está destinada a ser útil para evitar carreras entre operaciones PUT.

Es decir, la estrella le permite al cliente decir: "NO PONGA este archivo si ya hay alguna versión de este archivo allí".

¿Qué significa el siguiente encabezado HTTP 1.1?

If-None-Match: *

Lo entiendo cuando uso un ETag fuerte o débil o incluso una lista de ETags, pero no entiendo su uso cuando se usa star (*).

Editar: Sería bueno tener algún pseudocódigo (también es bueno el código PHP) que mostraría cómo / qué responder a "If-None-Match: *".


La respuesta es, depende.

Supongamos que hemos recibido

If-None-Match: * If-Modified-Since: <yesterday date>

Y la página ha sido alterada hoy .

Primero, echamos un vistazo al * que nos dice: "Devuelve 304 si el recurso está allí y se cumple la condición (2)". Bien, el recurso existe, PERO la condición (2) establece: "Solo devuelve 304, si la fecha es posterior a la actual". Por lo tanto, esta condición no se cumple y la página se entregará por completo.

Si no hubiésemos recibido If-Modified-Since , la respuesta hubiera sido 304.

Si el recurso no existía previa solicitud, habríamos devuelto el código correspondiente (como si no hubiera If-None-Match ).

304 solo debe devolverse en respuesta a solicitudes GET y HEAD, y todos los encabezados de respuesta relacionados con caché deben estar allí. Para todos los demás tipos de solicitudes, su servidor debe responder al 412 (condición previa no).

Espero que ayude ;)