Tengo un servidor web que proporciona un ETag para una URL en particular. Cuando el navegador realiza una solicitud para esta url, proporciona el encabezado http "If-None-Match" con el valor ETag contenido en la respuesta anterior del servidor para esa url. Ahora, si programáticamente agrego el encabezado de solicitud "If-Modified-Since" y lo configuro para una fecha futura o pasada (no importa), el navegador deja de enviar la "Cabecera" If-None-Match ". Lo he visto tanto en Firefox como en Chrome (no probado con ningún otro navegador). No puedo concluir de la especificación de HTTP/1.1 que este debería ser el caso. ¿Por qué pasó esto?If-Modified-Since reemplaza If-None-Match en el navegador
Aquí hay un ejemplo de código simple que reproducirá el escenario. El código supone que el servidor responde con un encabezado Etag.
var request = new XMLHttpRequest();
request.open("GET", someUrl, true);
request.onreadystatechange = function(){};
// This statement makes the browser stop sending the "If-None-Match" header
request.setRequestHeader("If-Modified-Since", "Sat, 29 Oct 1994 19:43:31 GMT");
request.send(null);
En su lugar, puede leer http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p4-conditional-21.html. –