PHP标头 - 位置重定向似乎失去了缓存

时间:2011-07-12 16:49:26

标签: php caching browser redirect header

在将请求重定向到不同的主机之前,我正在对文件的响应代码进行一些cURL检查(以确保在重定向之前文件存在)。

当我们都开心的时候,我把它们送到远程主机的服务器上,我们都很开心。

唯一的问题似乎是它没有缓存在用户的机器上。有什么我可以做的让用户浏览器知道这是同一个文件?我认为它本来就知道它只是一个标题位置重定向(即标题('location:http://www.locationtogo.com/asda?242');

感谢您的帮助!

-------更新----------

似乎有很多问题;让我一步一步解释......

  1. 用户从handler.php
  2. 请求文件
  3. handler.php执行cURL检查以查看响应代码是否为
  4. 如果响应代码为200,我会重定向到文件
  5. 但每次重新加载handler.php为同一个文件...它会重新加载整个文件
  6. 我现在意识到 - 愚蠢的错误 - 但是这里会列出只是让任何人经历同样的事情 - 我当然是在寻找200响应,而不是200或304。

    现在正在缓存。

2 个答案:

答案 0 :(得分:0)

您需要添加Cache-ControlExpires标头以及重定向,以表明它可以缓存。

示例(这将允许浏览器将响应缓存一小时)

header('Cache-Control: max-age=3600')

答案 1 :(得分:-1)

默认情况下,PHP和apache不会缓存PHP文件。我最近遇到了这个问题。但是,如果需要,您可以返回304,这将解决问题。我是用etags做的。

只需在首次访问时首次发送etag哈希值。

header('Etag: '.$eTagHash);

然后,检查etag是否存在,如果是,请告诉浏览器它是304未修改。

if(isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
    if(trim($_SERVER['HTTP_IF_NONE_MATCH']) == trim($eTagHash)){
       header("HTTP/1.1 304 Not Modified");
       exit;
    }}

您可以将$ eTagHash设置为您想要的任何内容。你也应该在apache服务器上启用etags(大多数都这样做)。

如果您需要在其他地方重定向,只需更改etag哈希值,当它不匹配时,您可以使用新值再次向浏览器发送标题etag。