如何在收到 http 响应代码 304 后绕过缓存的内容刷新



我有一个php应用程序,它使用prototypejs使用另一个php脚本进行ajax轮询,以检查是否有新内容或内容是否已更新。如果内容未更改,则返回 http 响应代码 304。

这一切都工作正常,但是我刚刚发现浏览器似乎刷新了内容,即使发送了响应代码 304。这些数据似乎来自浏览器缓存,其中填充了上次成功响应代码 200(当轮询器发现更改的数据时)的内容。

http rfc 声明:"如果状态代码为 304(未修改),则缓存使用存储在缓存条目中的实体正文作为此传出响应的实体正文"。

有没有办法解决这个问题?因为即使没有更改任何数据,人们仍然会在每次返回代码 304 时看到轻微的闪烁。我可以使用响应代码 410(Gone),它没有这种奇怪的行为,但我认为这不是这样做的方法。

我目前的ajax调用是简单的原型代码:

function showProcessing() {
  if(Ajax.activeRequestCount > 0)
    document.getElementById('inProgress2').style.display = 'none';
    document.getElementById('inProgress').style.display = 'inline';
}
function hideProcessing () {
  if(Ajax.activeRequestCount <= 0)
    document.getElementById('inProgress').style.display = 'none';
    document.getElementById('inProgress2').style.display = 'inline'; 
}
Ajax.Responders.register({
  onCreate: showProcessing,
  onComplete: hideProcessing
});

因此,如果可以通过原型禁用此行为,那么它可能必须在"onComplete"部分完成,但我不知道如何完成。

请再看看原始的相关网站 http://codeigniter.com/wiki/AJAX_for_CodeIgniter/因为它有这方面的例子。

最新更新