HTTP/1.1 RFC规定"HEAD方法与GET相同,但服务器不得在响应中返回消息体." 我知道Apache尊重RFC,但模块不必.我的问题是,mod_php5是否尊重这一点?
我问的原因是因为我刚刚看到一篇文章说PHP开发人员应该自己检查:
if (stripos($_SERVER['REQUEST_METHOD'], 'HEAD') !== FALSE) {
exit();
}
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索了一下并没多少出现,除了一些人说他们在获得HEAD请求后尝试了一些奇怪的东西,比如mod_rewrite/redirect,以及2002年的一些旧的bug票据声称mod_php默认仍然执行了其余的脚本.所以我只是通过使用PECL :: HTTP来运行快速测试
http_head('http://mysite.com/test-head-request.php');
Run Code Online (Sandbox Code Playgroud)
虽然有:
<?php error_log('REST OF SCRIPT STILL RAN'); ?>
Run Code Online (Sandbox Code Playgroud)
在test-head-request.php中查看脚本的其余部分是否仍然执行,但事实并非如此.
我认为这应该足以解决它,但希望获得更多反馈,并且可能有助于清除那些对此感到疑惑的其他人的困惑.因此,如果有人知道他们的头顶(没有双关语意) - 或者他们用于接收HEAD请求的任何约定,那就太好了.否则,我会稍后查看C源代码并回复我的调查结果.谢谢.
HEAD 方法与 GET 相同,只是服务器不得在响应中返回消息正文。
这就是为什么不应执行该检查的原因。客户端应该相信 HEAD 请求的处理方式与发出 GET 的方式相同(数据库连接、处理等...)。
附录:
表演时
HEAD /test.php?a=3 HTTP/1.1
Host: somesite.com
Run Code Online (Sandbox Code Playgroud)
PHP 仍将使用查询字符串中的变量填充 $_GET(和 $_REQUEST),即使它不是 GET 请求。这允许遵守 HEAD 定义。
归档时间: |
|
查看次数: |
2269 次 |
最近记录: |