使缓存的内容无效,If-Modified Headers?

我有一个特殊的问题:

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”参数更改过去的DATE TIME的If-Modified-Since标头来做到这一点。

这是目前发生的事情:

  1. 请求,200 OK响应新鲜内容
  2. 后续请求获得304响应,浏览器从缓存中获取
  3. 内容已在服务器上更改
  4. 使用修改的If-Modified-Since标头(没有URL字符串更改),200 OK响应和新鲜内容进行请求
  5. 后续请求(不改变If-Modified-Since标头)似乎从步骤#1中检索旧内容

我想我的印象是,在第4步,浏览器内容应该已刷新,我缺少什么?

我设置了一个小测试,所以你可以尝试看看我的意思: http : //tweetplenty.com/test/test2.php …使用FF和firebug,如果你可以使用console.log()…这里是操作的顺序:

  1. “正常”链接将向http://tweetplenty.com/test/test.php发出请求而不修改if-modified-since …后续请求使用“普通”链接应该返回304(它应该返回200)确保每60秒一次)

  2. “if-modified-since”链接将向http://tweetplenty.com/test/test.php请求修改if-modified-since标头,浏览器将返回新内容。

  3. 此时再次单击“正常”将返回先前缓存的数据,我认为在单击“if-modified-since”链接后应该刷新数据。

如果您想在这里查看测试脚本,请访问: http : //tweetplenty.com/test/test.zip

我想你想要修改所有请求的标题。查看本页面的示例#2。

听起来像jquery脚本和PHP脚本之间的某种程度的缓存。 我怀疑是浏览器级别的缓存。 (虽然它理论上可以是代理缓存 ,但我猜)

您是否尝试过使用curl或Web浏览器手动尝试AJAX请求?

当通过XmlHttpRequest发出请求以从服务器脚本获取任何已修改的内容时,您应该附加一些在查询字符串末尾发生更改的变量。

例如,如果您的脚本是

 mydomain.com/myscript.php 

然后通过让我们说Jquery Ajax来发出请求的方式来调用它

 mydomain.com/myscript.php?t=[some_value]. 

通常[t]可以是以毫秒为单位的当前时间或其他数字。

换句话说,每次通过XMLHttpRequest对象发送请求时,请尝试创建唯一的URL。

至于Cache-Control标头,您应该查看更多选项。

问候,