首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >If-Modified-None覆盖浏览器中的If-None-Match

If-Modified-None覆盖浏览器中的If-None-Match
EN

Stack Overflow用户
提问于 2012-10-11 15:14:18
回答 1查看 1.7K关注 0票数 5

我有一个网络服务器,它提供了一个特定的网址的ETag。当浏览器执行对该url的请求时,它提供具有包含在针对该url的来自服务器的先前响应中的ETag值的http报头"If-None-Match“。现在,如果我以编程方式添加请求标头“if -Modified- set”,并将其设置为将来或过去的日期(无关紧要),浏览器将停止发送"If-None-Match"-header。我在FireFox和Chrome中都看到了这一点(没有在任何其他浏览器上测试过)。我不能从HTTP/1.1规范中得出这样的结论。这一切为什么要发生?

下面是一个简单的代码示例,它将重现该场景。该代码假设服务器使用Etag-header进行响应。

代码语言:javascript
复制
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

回答 1

Stack Overflow用户

回答已采纳

发布于 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-SinceIf-None-Match头等。

现在,当您使用If-(Un)Modified-SinceIf-None-Match调用SetRequestHeader()时,它将从请求中清除这两个头并设置您的值。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12834138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档