我有一个网络服务器,它提供了一个特定的网址的ETag。当浏览器执行对该url的请求时,它提供具有包含在针对该url的来自服务器的先前响应中的ETag值的http报头"If-None-Match“。现在,如果我以编程方式添加请求标头“if -Modified- set”,并将其设置为将来或过去的日期(无关紧要),浏览器将停止发送"If-None-Match"-header。我在FireFox和Chrome中都看到了这一点(没有在任何其他浏览器上测试过)。我不能从HTTP/1.1规范中得出这样的结论。这一切为什么要发生?
下面是一个简单的代码示例,它将重现该场景。该代码假设服务器使用Etag-header进行响应。
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);发布于 2012-12-11 19:47:40
现在,如果我以编程方式添加request-header“if -
-”并将其设置为将来或过去的日期(无关紧要),浏览器将停止发送“If---header”。
如果服务器在给定资源的Etag和Last-Modified标头中都提供了Etag和Last-Modified标头,则不应该这样做:
HTTP/1.1客户端...如果源站同时提供了实体标签和Last-Modified值,则应在有缓存条件的请求中同时使用这两个验证器。这允许HTTP/1.0和HTTP/1.1缓存做出适当的响应。
编辑:当调用XmlHttpRequest.open()时,该实现使用nsIHttpChannel准备请求,如果可以找到本地缓存项,则使用If-Modified-Since和If-None-Match头等。
现在,当您使用If-(Un)Modified-Since或If-None-Match调用SetRequestHeader()时,它将从请求中清除这两个头并设置您的值。
https://stackoverflow.com/questions/12834138
复制相似问题