为什么浏览器不在AJAX请求中缓存301?

时间:2009-03-28 00:14:20

标签: php apache http-headers

这是XMLHttpRequest:

$.ajax({
    method: "get",
    url: "getPage.php",
    data: $data,
    dataType: 'json',
    timeout: 2000,
    success: function(result) {
        handleContent(result);
        }
    });

这是getPage.php?data = data

header("Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT");
header("Cache-Control: max-age=" . $offset . ", public");
header("HTTP/1.1 301 Moved Permanently");
header("Location: $location);

这是$ location:

header("Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT");
header("Cache-Control: max-age=" . $offset . ", public");
print $print;

客户端浏览器正确缓存$ location。但是它不会在getPage.php?data = data

中缓存重定向

每次调用ajax-request时,它都会请求GET getPage.php?data = data。

我希望它能自动获取GET $ location(或者更确切地说尝试GET $ location并从缓存中获取页面)。

这不是301 Permanent Redirect的用途吗?创建一个由浏览器缓存的重定向(当然还有一些代理,搜索引擎等)?

请不要质疑为什么我选择这样做。我有理由这样做,我不打算进入这里。我想要的只是一个答案,可能是一个解决方案,它允许301重定向被缓存,在第一次请求后根本没有GET请求。

提前致谢!

2 个答案:

答案 0 :(得分:6)

修改:大多数浏览器现在(2013年11月)执行缓存重定向,请参阅Browserscope(“缓存重定向”测试),但在问题被问到时它们没有

答案 1 :(得分:1)

这个帖子和它的评论包含了处理这个问题的方法,虽然提出的问题解决方案仍然有点“松懈”(主要是因为目前的浏览器实现):

How to manage a redirect request after a jQuery Ajax call

我希望你能找到它的信息。