在某些情况下,我的 PHP 脚本提供了一个大的二进制文件。我想支持if-modified-since标头。
在我的测试中,我观察到了意外的行为:如果我在 PHP 中设置了最后修改的响应标头,那么 Apache 似乎会自动处理带有if-modified-since标头的请求('200 OK' + 内容或没有内容的 '304 Not Modified')。它甚至推翻了header("Last-Modified: $lastModifiedValue GMT", true, 200);
.
在决定是否依赖它或是否应该实现if(isset($headers['If-Modified-Since'])){...}
块之前,我试图找到有关此行为的文档。
任何关于这种行为有多正式的经验、建议或提示都将非常受欢迎。
完整的测试片段:
$lastModifiedValue = gmdate('D, d M Y H:i:s', filemtime($path));
header('Content-Type: application/octet-stream');
header("Last-Modified: $lastModifiedValue GMT", true, 200);
header('Content-Length: ' . filesize($path));
header('Content-Disposition: attachment; filename="binary-data.bin"');
ob_end_clean();
$fileHandle = fopen($path, "rb");
fpassthru($fileHandle);
fclose($fileHandle);
exit;
(服务器在 Apache 上运行:2.2,PHP:5.6)