如果修改了 - HTTP协议

时间:2014-02-12 16:24:22

标签: http

如果我的浏览器使用缓存(本地缓存),它是否保证它发送的每个HTTP请求都包含“IF MODIFIED SINCE”标题行?

如果没有,我该如何定义它呢?如果我将代理服务器定义到浏览器怎么办?它会自动添加吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

我正在使用我的RESTful Web服务进行此操作,并针对特定资源运行了一些测试。首先,我试图通过在资源的HTTP响应上设置以下HTTP标头来控制我的Web服务器中的浏览器缓存:

Cache-Control: must-revalidate, max-age=30
Last-Modified: Mon May 19 11:21:05 GMT 2014
Expires: Mon May 19 11:51:05 GMT 2014

然后,从我的网络用户界面,我有一个定时器(每5秒钟)对我所说的可缓存的资源进行GET的计时器。由于浏览器缓存中的资源尚未过期,因此,从浏览器缓存中提供资源的GET请求,一旦" max-age"已过期下一个GET请求转到服务器,浏览器添加" If-Modified-Since"标题为" Last-Modified"将date作为这样的值:

[GET] - /cms_cm_web/api/notification
referer: http://localhost:8080/cms_ui/#/
accept: application/json, text/plain, */*
accept-language: en-us
ua-cpu: AMD64
accept-encoding: gzip, deflate
user-agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
host: localhost:8080
if-modified-since: Mon, May 19 11:21:05 GMT 2014
connection: Keep-Alive

这来自IE9浏览器。我也从最新的Firefox和Chrome浏览器中获得相同的信息。 从这里,服务器可以查找" If-Modified-Since"如果它确定资源尚未被修改,则返回304 Not Modified响应,否则返回200 OK响应的资源表示。

所以根据HTTP规范,您可以使用" Expires"来控制缓存。和/或" Cache-Control"标题和" Last-Modified"头。这将导致浏览器缓存执行所谓的"条件GET"请求,因为它包括" If-Modified-Since"报头中。