2014-11-04 34 views
1

我的网站使用AJAX将页面加载到div中,并发送以下自定义标头,其中包含每个AJAX请求:X-AJAXRequest使用自定义HTTP标头时的奇怪行为

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

这是我的PHP代码:

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

现在的问题是,当有人访问X,点击Y上的链接,然后Y的点击对X,X装有页眉和页脚仿佛标题不存在。甚至当开发人员工具(f12)打开时,这也不会发生!

我认为这可能是缓存,因为IE11(我正在开发的浏览器)有Back Navigation Caching,但即使如此,为什么要缓存删除我的头?

Here's链接,这是使用问题

+0

缓存不与您的标题交互;缓存意味着_no请求正在被发送,并使用缓存值。如果devtools打开它的工作,这绝对是缓存问题。响应设置no-cache头。 – mudasobwa 2014-11-04 15:59:30

+0

需要注意的是,已经有一个常用的(尽管是非标准的)ajax请求头,它的“X-Requested-With:XMLHttpRequest”。 – Flosculus 2014-11-04 16:08:40

+0

@Flosculus我知道,但我不想检查标题的值 – user3088260 2014-11-04 16:16:38

回答

0

现在看来似乎该网站的确是缓存是造成你的麻烦。一旦用户访问了X,浏览器就会缓存它(根据缓存规则和服务器提供的内容)。然后,当你转到Y并尝试通过AJAX加载X时,浏览器知道它已经在缓存中有X,并从那里传送它(根本不会向服务器发送请求)。

在Chrome中,默认情况下,当您打开开发人员工具(F12)时会关闭缓存,这就是为什么当您开启开发人员工具时没有看到此问题的原因。您可以进入开发者工具设置(右上角),并取消“禁用缓存(DevTools处于打开状态)”。然后,您应该能够在页面Y上看到浏览器从缓存中获取X.

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