Pet*_*ohn 6 php etag header http
我无法在用户的浏览器上可靠地设置Etag.当用户点击我的一个外部链接时,我想将文章ID设置为他们的Etag(我也使用cookie,但我喜欢尝试使用Etag专门测试其可靠性).
几个小时/天之后,当同一个用户返回我的网站时,我希望能够阅读Etag值并将其用于内容.
我可以在初始点击时设置Etag,但是当用户返回时,Etag值就消失了.我认为它已过期或其他东西.这是我一直在尝试的代码:
<?
$time = 1280951171;
$lastmod = gmdate('D, d M Y H:i:s \G\M\T', $time);
$etag = '123';
$ifmod = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] == $lastmod : null;
$iftag = isset($_SERVER['HTTP_IF_NONE_MATCH']) ? $_SERVER['HTTP_IF_NONE_MATCH'] == $etag : null;
if (($ifmod || $iftag) && ($ifmod !== false && $iftag !== false)) {
header('HTTP/1.0 304 Not Modified');
} else {
header("Last-Modified: $lastmod");
header("ETag: $etag");
}
print_r($_SERVER);
?>
Run Code Online (Sandbox Code Playgroud)
你应该用双引号包装你的etag(正如Codler提到的链接所示):
'"' . $etag . '"'
Run Code Online (Sandbox Code Playgroud)
我认为它不太可能解决你的问题,但你可能想要
header('Not Modified',true,304);
Run Code Online (Sandbox Code Playgroud)
代替
header('HTTP/1.0 304 Not Modified');
Run Code Online (Sandbox Code Playgroud)
从PHP 5.4开始,有一个更好的方法http_response_code:
http_response_code(304);
Run Code Online (Sandbox Code Playgroud)
另外,你检查了通常的嫌疑人停止标题?Unicode Byte-Order Markers非常讨厌这个问题.(如果你能看到你自己设置的其他标题,请忽略)
| 归档时间: |
|
| 查看次数: |
10438 次 |
| 最近记录: |