Почему Wget имеет Host Header в своем HTTP-запросе?

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

Итак, почему тот 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 ответа

Решение

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

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

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

Другие вопросы по тегам