Почему 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
Строка не включает имя хоста (как в вашем примере), вам нужно включить его в заголовки (потому что в противном случае "виртуальные" домены были бы невозможны, если сервер не может определить, для какого хоста был ваш запрос).