在重定向请求到不同主机之前,我正在对文件的响应代码进行一些cURL检查(以确保在重定向之前文件存在)
当我们都高兴时,我把它们从服务器发送到远程主机,我们都很高兴。
唯一的问题似乎是它没有在用户的机器上缓存。我能做些什么让用户浏览器知道这是同一个文件吗?我认为它会固有地知道,因为它只是一个头部位置重定向(即header('location:http://www.locationtogo.com/asda?242');
谢谢你的帮助!
------- UPDATE ----------
似乎有很多关于这个的问题;所以让我一步一步来解释…
- 用户从handler.php请求文件
- handler.php cURL检查响应代码是否为
- 如果响应码是200,我正在重定向到文件
- 然而,每次重新加载handler.php的同一文件…它会重新加载整个文件
我现在意识到——愚蠢的错误——但我将在这里列出,以防有人遇到同样的情况——我当然是在寻找响应200,而不是200或304。
您需要在重定向中添加Cache-Control
或Expires
标头,以表明它可以被缓存。
示例(这将允许浏览器缓存响应一个小时)
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。