当我使用AJAX时,Firefox忽略了Cache-Control no-store,no-cache

时间:2013-04-13 08:39:00

标签: javascript firefox browser-cache

在我的网站中,每个页面都可以返回html和json。 如果请求是正常页面返回html,如果请求是AJAX页面返回json。

问题是当我需要json响应时,firefox会缓存html响应。 在这两种情况下都有没有缓存选项的响应标头

Cache-Control   no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection  Keep-Alive
Date    Sat, 13 Apr 2013 08:31:06 GMT
Expires Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive  timeout=5, max=100
Pragma  no-cache

这就是我在做AJAX请求的方式:

$.ajax({
    url: window.location.href,
    dataType: 'json',
    //cache: false,
    success: function(data) {
        // here I get html, (must be json)
        // If I set "cache: false" then all is ok
    }
});

这个问题出在firefox中。在chrome中一切都很好

我认为是因为我正在我现在找到的页面上发送请求。因为如果我在window.location.href上更改url。 '?a = 1',如果我已经在页面window.location.href。 '?a = 1'AJAX返回json我想要的。

2 个答案:

答案 0 :(得分:1)

您可以将缓存控制设置为无需缓存处理ajax请求的任何文件

 header('Cache-Control: no-cache, must-revalidate');

或试试这个:

if($_SERVER['HTTP_ORIGIN'] == "http://example.com")
{

    header('Access-Control-Allow-Origin: http://example.com');
    header('Cache-Control: no-cache, must-revalidate');
    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
    header('Content-type: application/json'); 
    //your code here

}else{    
   header('Content-Type: text/html');
   echo "<html>";
   echo "<head>";
   echo "   <title>Another Resource</title>";
   echo "</head>";
   echo "<body>",
   "</body>",
   "</html>";
}

答案 1 :(得分:1)

为什么不更改URL方案以便使用不同的URL访问JSON和HTML? E.g。

/foo.html vs. /foo.json

/ foo?format = html vs. / foo?format = json

不要认为它是Firefox的解决方法;您希望尽可能避免降低可缓存性,因为高度可缓存的网站对您的用户执行速度更快,并减少了为您的网站提供服务所需的资源量。