Я использую ЗАВИХРЕНИЕ для тестирования ГЛАВНЫХ запросов к моему nginx серверу. Подаваемый файл является простым PHP
файл.
Если я использую GET
:
$ curl -XGET http://test.com/phpinfo.php -I
HTTP/1.1 200 OK
Date: Tue, 09 Apr 2013 00:35:35 GMT
Content-Type: text/html
Connection: keep-alive
Content-Length: 72080
Однако, если я использую HEAD
:
$ curl -XHEAD http://test.com/phpinfo.php -I
HTTP/1.1 200 OK
Date: Tue, 09 Apr 2013 00:37:00 GMT
Content-Type: text/html
Connection: keep-alive
Почему это - это, если запрос HEAD
, nginx опускает Content-Length
заголовок? Сценарий PHP очень прост и не отвечает на HEAD
любым специальным способом.
Есть ли любая опция, которую я могу включить в nginx, так, чтобы это отправило Content-Length
для HEAD
также?
Соответствующая nginx информация:
nginx version: nginx/1.2.8
built by gcc 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1)
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx-1.2.8 --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module --with-pcre --conf-path=/etc/nginx/nginx.conf --add-module=../headers-more-nginx-module-0.19rc1
Конфигурация:
user www-user;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
client_max_body_size 10M;
sendfile on;
keepalive_timeout 65;
more_clear_headers "Server";
gzip on;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/javascript text/xml application/xml application/rss+xml application/atom+xml application/rdf+xml;
server {
server_name test.com;
root /www;
index index.php index.html index.htm;
listen 80 default_server;
rewrite ^/(.*)/$ /$1 permanent; #remove trailing slash
#charset koi8-r;
#access_log logs/host.access.log main;
include general/*.conf;
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ \.php$ {
fastcgi_intercept_errors on;
fastcgi_pass unix:/run/php/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
Одна из причин того, что nginx
, вероятно, не включает заголовок ответа Content-Length
для запроса HTTP HEAD
, заключается в том, что , по определению , ответ на запрос HEAD
не должен содержать тело сообщения в ответе (подробнее см. RFC 2616 ).
Теперь HTTP-сервер может отправлять Content-Length:0
для ответов на запросы HEAD
, но это дополнительная информация по сети, которая не обязательно нужна. Я подозреваю, что nginx
просто опускает в противном случае избыточный заголовок ответа, не включая заголовок Content-Length
в ответ на ваши запросы HEAD
.
Надеюсь, это поможет!