Maxim Dounin
November 29, 2018 02:04PM
Hello!

On Thu, Nov 29, 2018 at 08:35:18PM +0200, Gena Makhomed wrote:

> On 29.11.2018 18:30, Maxim Dounin wrote:
>
> >> В документации к директиве fastcgi_cache_key приведен такой пример:
> >>
> >> fastcgi_cache_key localhost:9000$request_uri;
> >>
> >> У этого примера есть несколько проблем:
> >>
> >> 1. Если кто-то сделает к бекенду HEAD-запрос, то в кеш запишется пустой
> >> ответ и на последующие GET-запросы будет отдаваться пустая страница.
>
> > AFAIK, никакой специальной обработки HEAD-запросов в FastCGI не
> > предусмотрено. И в том числе не предсмотрено в каком-нибудь PHP
> > из коробки. Соответственно всё будет работать штатно.
>
> Специальная обработка HEAD-запросов предусмотрена в HTTP протоколе:
> https://tools.ietf.org/html/rfc7231#section-4.3.2
>
> The HEAD method is identical to GET except that the server MUST NOT
> send a message body in the response (i.e., the response terminates at
> the end of the header section).
>
> В nginx присутствует workaround, который исправляет поведение бекендов,
> которые на HEAD-запрос *ошибочно* отвечают так же, как и на GET-запрос.
>
> Но далеко не все бекенды содержат в себе эту ошибку, многие из них ведут
> себя именно так, как этого от них требует спецификация HTTP протокола.

CGI и HTTP - это два разных протокола. В последних вариациях на
тему спецификации CGI записано, что на HEAD-запросы тело
возвращать не надо (а если вдруг вернули - то сервер его должен
поскипать), https://tools.ietf.org/html/rfc3875#section-4.3.3:

The HEAD method requests the script to do sufficient processing to
return the response header fields, without providing a response
message-body. The script MUST NOT provide a response message-body
for a HEAD request. If it does, then the server MUST discard the
message-body when reading the response from the script.

Однако на момент собственно появления и активного распространения
CGI никаких подобных требований не существовало, см.
https://www.w3.org/CGI/ и в частности
https://tools.ietf.org/html/draft-robinson-www-interface-00. И на
практике я не встречал скрипты, которые бы отдельно обрабатывали
HEAD-запросы.

> > Речь про какие-то фреймворки, которые обрабатывают
> > HEAD автоматически, не донося соответствующую информацию до кода?
> > Или про какой-то стандартный софт, который не возвращает тело для
> > HEAD-запросов?
>
> Какая разница, сам софт или фрейморк используемый софтом в каждом
> конкретном случае обрабатывает HEAD запросы согласно требований RFC?

Никакой. Но с этой точки зрения так же нет разницы, что именно
написано в примерах в описании директивы fastcgi_cache_key.

[...]

--
Maxim Dounin
http://mdounin.ru/
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

Документация к директиве fastcgi_cache_key

Gena Makhomed November 29, 2018 10:00AM

Re: Документация к директиве fastcgi_cache_key

Maxim Dounin November 29, 2018 11:32AM

Re: Документация к директиве fastcgi_cache_key

Gena Makhomed November 29, 2018 01:36PM

Re: Документация к директиве fastcgi_cache_key

Maxim Dounin November 29, 2018 02:04PM

Re: Документация к директиве fastcgi_cache_key

Gena Makhomed November 30, 2018 04:32AM

Re: Документация к директиве fastcgi_cache_key

Илья Шипицин November 30, 2018 05:38AM

Re: Документация к директиве fastcgi_cache_key

Константин Ткаченко December 03, 2018 04:04AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 226
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready