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


PHP Header - Location Redirect seems to lose caching

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

当我们都高兴时,我把它们从服务器发送到远程主机,我们都很高兴。

唯一的问题似乎是它没有在用户的机器上缓存。我能做些什么让用户浏览器知道这是同一个文件吗?我认为它会固有地知道,因为它只是一个头部位置重定向(即header('location:http://www.locationtogo.com/asda?242');

谢谢你的帮助!

------- UPDATE ----------

似乎有很多关于这个的问题;所以让我一步一步来解释…

  1. 用户从handler.php请求文件
  2. handler.php cURL检查响应代码是否为
  3. 如果响应码是200,我正在重定向到文件
  4. 然而,每次重新加载handler.php的同一文件…它会重新加载整个文件

我现在意识到——愚蠢的错误——但我将在这里列出,以防有人遇到同样的情况——我当然是在寻找响应200,而不是200或304。

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

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

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

PHP和apache默认不缓存PHP文件。我最近也遇到了这种情况。然而,如果你想,你可以返回一个304,这将解决问题。我用了标签。

只需在浏览器第一次访问时将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。