Почему nginx не отправляет заголовок Довольной Длины, когда запрос является ГОЛОВОЙ?

Я использую ЗАВИХРЕНИЕ для тестирования ГЛАВНЫХ запросов к моему 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;

        }
    }
}
2
задан 9 April 2013 в 04:27
1 ответ

Одна из причин того, что nginx , вероятно, не включает заголовок ответа Content-Length для запроса HTTP HEAD , заключается в том, что , по определению , ответ на запрос HEAD не должен содержать тело сообщения в ответе (подробнее см. RFC 2616 ).

Теперь HTTP-сервер может отправлять Content-Length:0 для ответов на запросы HEAD , но это дополнительная информация по сети, которая не обязательно нужна. Я подозреваю, что nginx просто опускает в противном случае избыточный заголовок ответа, не включая заголовок Content-Length в ответ на ваши запросы HEAD .

Надеюсь, это поможет!

1
ответ дан 3 December 2019 в 13:00

Теги

Похожие вопросы