2011-05-08 74 views
1

如果我创建一个XMLHttpRequest并且浏览器缓存响应,它是否也会缓存HTTP响应头?也就是说,下次我提出同样的要求时,我会从response.getResponseHeader得到相同的值吗?XMLHttpRequests是否缓存响应头?

这是依赖于浏览器?

+0

你试过了吗? – 2011-05-08 00:44:11

回答

0

标题不是被缓存或不被重用。由于请求被发送,所以接收到标题并且只有在这个请求在高速缓存中有效时才能决定。新的标题已经被下载了,所以没有必要重复使用旧标题。

只有响应主体被高速缓存。

你可以很容易地测试这个。向静态资源(img或txt文件或其他)发出XHR请求,并检查Date标题。

我不认为它依赖于浏览器。浏览器缓存和重复使用HTTP标头将会非常非常奇怪。

编辑
jQuery的增加(默认情况下,我认为)反缓存参数GET请求(很讨厌),这将排序的回答你的问题:什么是缓存这样。

+0

但是,所有的XHR都会向服务器发出实际的请求吗?当您链接到缓存的图像或样式表时,有时浏览器会重新使用它,甚至无需与服务器通话。这在XHRs中不会发生吗? – 2011-05-08 01:50:44

+0

如果您专门提出请求,浏览器将提出该请求。使用图片和样式表,您不需要特别提出该请求。如果你想绝对100%确定,你可以添加一个像jQuery一样的无缓存参数:'page.html?_ = 324832475934' – Rudie 2011-05-08 10:04:35

1

我敢肯定,至少主要的浏览器不会试图缓存标题。但是,如果您想完全防止缓存,则可能需要发送特殊标题。如果你想要做缓存行为的快速测试,这里有一个页面:

http://www.mnot.net/javascript/xmlhttprequest/cache.html

而且我建议,如果你想看到什么实际发生的事情,你去得到一个数据包嗅探器,如Wireshark的,看看为自己。我可以想象浏览器至少对XmlHttpRequest执行HEAD请求,即使它给你缓存的主体,但我可能是错的。

+0

你没有错。甚至需要标头才能知道缓存仍然有效。 – Rudie 2011-05-08 00:54:18