【发布时间】:2009-08-18 17:36:26
【问题描述】:
我遇到了一个特殊的问题:
PHP SCRIPT:
// checks If-Modified-Since header (if nothing has changed)
// Sends HTTP/1.0 304 Not Modified
// Sends Cache-control: public, must-revalidate
// exits
// if NO If-Modified-Since or something has changed
// builds content
// Sends Last-Modified: [DATE TIME]
// Sends Cache-control: public, must-revalidate
// exits
我正在使用 jQuery AJAX 尝试按需刷新内容,我试图通过使用“beforeSend”参数更改带有过去日期时间的 If-Modified-Since 标头来做到这一点。
这是目前发生的情况:
- 发出请求,200 OK 响应,内容新鲜
- 后续请求得到 304 响应,浏览器从缓存中拉取
- 服务器上的内容已更改
- 使用经过修改的 If-Modified-Since 标头发出请求(没有 URL 字符串更改),带有新鲜内容的 200 OK 响应
- 后续请求(不更改 If-Modified-Since 标头)似乎从步骤 #1 检索旧内容
我猜我的印象是,在第 4 步,浏览器内容应该已经刷新,我错过了什么?
我设置了一个小测试,因此您可以尝试了解我的意思:http://tweetplenty.com/test/test2.php ...如果可以的话,请使用 FF 和 firebug,因为我可以使用 console.log() ...这是操作顺序:
“正常”链接将在不修改 if-modified-since 的情况下向 http://tweetplenty.com/test/test.php 发出请求...使用“正常”链接的后续请求应返回 304(应每 60 秒返回 200 OK )
“if-modified-since”链接会向http://tweetplenty.com/test/test.php发出请求,并带有修改后的 if-modified-since 标头,浏览器将返回新内容。
此时再次点击“正常”返回之前缓存的数据,我想应该是点击“if-modified-since”链接后刷新了数据。
如果您想在此处查看测试脚本本身,请访问:http://tweetplenty.com/test/test.zip
【问题讨论】:
标签: php jquery ajax caching header