ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

nginx и RFC



On 10.01.2014 14:53, Валентин Бартенев wrote:

Так, между делом, хочу напомнить, что на CGI есть спецификация,
описывающая все переменные окружения, которые сервер должен передавать
приложению. И в ней вполне черным по белому сказано, что все переменные
HTTP_* это protocol specific переменные полученные
>>> из заголовков переданных клиентом.

Проблема со спецификацией CGI/1.1 в том, что она была создана
в тот момент, когда существовал только протокол HTTP/1.0
А в протоколе HTTP/1.0 единственным источником имени хоста
является заголовок Host:, такого понятия как "absolute URI"
в протоколе HTTP/1.0 вообще не существует. Потому так и написано.

Когда спецификацию CGI/1.1 публиковали в виде RFC -
эту ошибку/неточность исправить забыли. Что и стало причиной
путаницы и этих недоразумений, поскольку спецификация CGI/1.1
предполагает, что все запросы от клиентов приходят на сервер
только по протоколу HTTP/1.0, а они оказывается теперь могут
приходить и по протоколу HTTP/1.1, где правила определения
имени виртуального хоста уже стали несколько другими.

В HTTP/1.0 переменная HTTP_HOST работала всегда нормально,
а в HTTP/1.1 этот механизм работает не всегда как ожидалось.

Вот все отличия между версиями HTTP/1.0 и HTTP/1.1:
http://tools.ietf.org/search/rfc2616#section-19.6.1

Кстати, там есть интересные требования:

      - Servers MUST report a 400 (Bad Request) error if an HTTP/1.1
        request does not include a Host request-header.

      - Servers MUST accept absolute URIs.

================================================================

Можно ли nginx исправить так, чтобы он передавал на backend
по FastCGI в переменной HTTP_HOST имя хоста, к которому клиент
сделал свой запрос вне зависимости от того, где оно было
задано в исходном запросе, - в заголовке Host: (протокол HTTP/1.0)
или в виде host part of the Request-URI (протокол HTTP/1.1) ?

Или для этого надо сначала исправить спецификацию CGI/1.1
и только потом можно будет этот BUG исправить и в nginx ?

================================================================

Если заголовка Host в запросе вообще не будет, то и переменной HTTP_HOST
быть также не должно.

Каким образом это согласуется с RFC 2616 ? Там ведь в section-19.6.1
черным по белому написано, что тогда сервер MUST возвращать 400 ошибку.

В 5.2 также требуется, что если пришел запрос и это is not a valid host
on the server, the response MUST be a 400 (Bad Request) error message.

Вот уже на ровном месте два случая, где nginx нарушает требования RFC.

Это как, нормально?

--
Best regards,
 Gena

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.