我有一個Web服務器,它爲特定的URL提供了一個ETag。當瀏覽器執行對這個URL的請求時,它提供了http-header「If-None-Match」與包含在來自該URL的服務器的先前響應中的ETag值。現在,如果我以編程方式添加請求頭「If-Modified-Since」並將其設置爲未來或過去的日期(無關緊要),瀏覽器將停止發送「If-None-Match」標題。我在FireFox和Chrome中都看到了這一點(未經任何其他瀏覽器測試)。我不能從HTTP/1.1規範得出這種情況。爲什麼會發生?If-Modified-Since在瀏覽器中覆蓋If-None-Match
這是一個簡單的代碼示例,它將重現該場景。該代碼假定服務器使用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);
您可能想要閱讀http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p4-conditional-21.html。 –