【问题标题】:Invalidating cached content, If-Modified Headers?使缓存的内容无效,If-Modified Headers?
【发布时间】: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 标头来做到这一点。

这是目前发生的情况:

  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. “正常”链接将在不修改 if-modified-since 的情况下向 http://tweetplenty.com/test/test.php 发出请求...使用“正常”链接的后续请求应返回 304(应每 60 秒返回 200 OK )

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

  3. 此时再次点击“正常”返回之前缓存的数据,我想应该是点击“if-modified-since”链接后刷新了数据。

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

【问题讨论】:

    标签: php jquery ajax caching header


    【解决方案1】:

    我认为您想修改所有传入请求的标头。请查看 this page 上的示例 #2。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 它绝对是浏览器级别.. 尝试按 ctrl f5
      【解决方案3】:

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

      例如,如果您的脚本是

      mydomain.com/myscript.php 
      

      然后通过假设 Jquery Ajax 调用它的一种方法是在

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

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

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

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

      问候,

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-13
      • 2012-02-26
      • 2018-09-17
      • 1970-01-01
      • 2014-07-22
      • 2010-11-05
      • 1970-01-01
      • 2010-12-27
      相关资源
      最近更新 更多