Почему Wget имеет Host Header в своем HTTP-запросе? - PullRequest
2 голосов
/ 27 октября 2010

Основное различие между HTTP / 1.0 и HTTP / 1.1 заключается в том, что в HTTP / 1.1 есть обязательный Host заголовок (источник: HTTP Pocket Reference - O’illy).

Итак, почему у того Wget, который использует протокол HTTP / 1.0, есть заголовок хоста?

Мой вывод Wget с netcat :

GET / HTTP/1.0
User-Agent: Wget/1.12 (linux-gnu)
Accept: */*
Host: 127.0.0.1:10101
Connection: Keep-Alive

Поскольку очевидно, что Wget использует версию протокола HTTP / 1.0, как он может содержать заголовок узла?Или я что-то не так понимаю в моем понимании протокола HTTP?

И даже если HTTP / 1.0 может иметь заголовок хоста в своем HTTP-запросе, что может быть причиной использования wget с использованием протокола HTTP / 1.0 во время HTTP / 1.1может также использоваться вместо этого?

Ответы [ 2 ]

1 голос
/ 27 октября 2010

Заголовок Host был добавлен в качестве «необязательного» дополнения к HTTP / 1.0 очень рано, когда выяснилось, что это единственный способ разрешить одному серверу обслуживать страницы для нескольких доменов.wget использует HTTP / 1.0 с хостом как способ совместимости с максимальным количеством сайтов, некоторые из которых не отвечают на HTTP / 1.1, даже если им требуется хост.

1 голос
/ 27 октября 2010

В HTTP / 1.0 заголовок Host был необязательный .Разница в том, что HTTP / 1.1 изменил его с необязательно на обязательно .

В частности, если строка GET не включает имя хоста (как вваш пример), вам нужно включить его в заголовки (потому что иначе «виртуальные» домены были бы невозможны, если сервер не может определить, для какого хоста был ваш запрос).

...