使用自定义HTTP标头时的奇怪行为

时间:2014-11-04 15:45:28

标签: php html ajax http http-headers

我的网站使用AJAX将网页加载到div,并针对每个AJAX请求发送以下自定义标头:X-AJAXRequest

如果标题存在,我的网站会发送没有页眉和页脚的正文,否则会发送整个页面。

这是我的PHP代码:

if ( !empty($_SERVER['HTTP_X_AJAXREQUEST']))
{
    echo($head);
    echo($body);
    echo($scripts);
}
else{
    include("master.php");
}

现在,问题是,当有人访问X时,点击Y的链接,然后点击X上的Y点击,X会加载页眉和页脚,就好像标题不存在一样。当开发人员工具(f12)打开时,即使特别陌生,也不会发生这种情况!

我认为它可能是缓存,因为IE11(我正在开发的浏览器)有Back Navigation Caching,但即便如此,为什么缓存会消除我的标题?

Here's指向有问题的网站的链接

1 个答案:

答案 0 :(得分:0)

似乎确实是缓存会给你带来麻烦。一旦用户访问了X,您的浏览器就会对其进行缓存(基于所提供的缓存规则和服务器提供的内容)。然后当你转到Y并尝试通过AJAX加载X时,浏览器知道它已经在缓存中有X并从那里传送它(从不向服务器发送请求)。

在Chrome中,默认情况下,当您打开开发人员工具(F12)时会关闭缓存,这就是您打开它们时没有看到此问题的原因。您可以进入开发人员工具设置(右上角)并取消勾选"禁用缓存(当DevTools打开时)"。然后,您应该能够看到浏览器从第Y页的缓存中获取X.

解决这个问题的一个简单方法是将参数附加到URL(例如" ajax = true"例如对于ajax调用),这样浏览器会处理X和X?ajax =真如两个独立的资源"并缓存它们的两个不同版本。