我有一个为特定 URL 提供 ETag 的 Web 服务器。当浏览器对该 url 执行请求时,它会向 http-header “If-None-Match” 提供包含在服务器对该 url 的先前响应中的 ETag 值。现在,如果我以编程方式添加请求标头“If-Modified-Since”并将其设置为未来或过去的日期(没关系),浏览器将停止发送“If-None-Match”标头。我在 FireFox 和 Chrome 中都看到了这一点(未经任何其他浏览器测试)。我无法从 HTTP/1.1 规范中得出结论应该是这种情况。为什么会这样?
这是一个简单的代码示例,它将重现该场景。该代码假定服务器使用 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);