我刚刚对一个 PHP 文件进行了快速测试temp.php
,其中包含这部分代码:
<?php
echo "Hello, World!\n";
die;
向该文件发送 HTTP GET 请求可以获取页面内容:
$ telnet localhost 80
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /temp/temp.php HTTP/1.1
Host: localhost
HTTP/1.1 200 OK
Date: Thu, 08 Apr 2010 20:17:35 GMT
Server: Apache/2.2.12 (Ubuntu)
X-Powered-By: PHP/5.3.2RC2
Vary: Accept-Encoding
Content-Length: 14
Content-Type: text/html
Hello, World!
发送 HTTP HEAD 请求时不会:
$ telnet localhost 80
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HEAD /temp/temp.php HTTP/1.1
Host: localhost
HTTP/1.1 200 OK
Date: Thu, 08 Apr 2010 20:17:50 GMT
Server: Apache/2.2.12 (Ubuntu)
X-Powered-By: PHP/5.3.2RC2
Vary: Accept-Encoding
Content-Type: text/html
不确定这是否总是正确的,但......
我记得有一种情况(前一段时间是 PHP 5.1),我必须在 PHP 代码中测试自己是否收到 GET 或 HEAD 请求。
编辑:经过附加测试
我刚刚做了另一个测试:我的temp.php
文件现在包含这个:
<?php
file_put_contents('/tmp/a.txt', $_SERVER['REQUEST_METHOD'], FILE_APPEND);
var_dump($_SERVER['REQUEST_METHOD']);
die;
发送一个 HTTP HEAD 请求,我得到这个:
$ telnet localhost 80
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HEAD /temp/temp.php HTTP/1.1
Host: localhost
HTTP/1.1 200 OK
Date: Thu, 08 Apr 2010 20:21:30 GMT
Server: Apache/2.2.12 (Ubuntu)
X-Powered-By: PHP/5.3.2RC2
Vary: Accept-Encoding
Content-Type: text/html
Connection closed by foreign host.
在这里,没有输出。
但是,查看 /tmp/a.txt 文件:
$ cat /tmp/a.txt
HEAD
所以:服务器没有发送输出并不意味着什么都没做;-)