Какую обязательную информацию должен содержать заголовок HTTP-запроса?

Ответы:

36

GET / HTTP/1.0 является законным HTTP-запросом.

Если Hostполе заголовка отсутствует , вы можете не получить ожидаемые результаты, если целевой сервер является виртуальным хостом , у которого нет собственного IP-адреса, чтобы отличаться от других виртуальных хостов.

HTTP 1.1 требует Hostполя.

gbroiles
источник
1
Я немного исследовал себя, и вы правы @gbroiles. Для виртуального хостинга на основе имени в целом требуется браузер с HTTP 1.1. Браузеры отправляют имя хоста в заголовке хоста, а веб-сервер обслуживает виртуальные хосты на основе имен, если они настроены. В старых браузерах и HTTP 1.0 это несколько возможно, но вам нужен обходной путь, подобный директиве apache ServerPath. К счастью, более новые браузеры реализуют расширения при использовании HTTP 1.0, чтобы гарантировать отправку поля заголовка хоста. w3.org/Protocols/rfc2616/rfc2616-sec14.html
Стефан Кристин
1
Есть ли еще браузеры, которые на самом деле делают HTTP 1.0?
Pacerier
Многие пользовательские агенты используют HTTP 1.0. Люди, использующие веб-браузеры, будут использовать HTTP 1.1 или 2.0, где это возможно, но они могут получить доступ через прокси-сервер, который поддерживает только HTTP 1.0. Краулеры или боты могут использовать HTTP 1.0. Простые клиенты любят wgetиспользовать HTTP 1.0. Обратите внимание, что на стороне сервера не требуется никаких усилий для поддержки клиентов HTTP 1.0, потому что сервер, совместимый с HTTP 1.1, будет поддерживать клиентов HTTP 1.0 (HTTP 1.1 создан, чтобы быть прогрессивным улучшением по сравнению с HTTP 1.0; несовместимые функции, такие как chunked кодирование и поддержание активности по умолчанию отключено для запросов HTTP 1.0).
Томасруттер
3

Ни один из заголовков HTTP не требуется в запросе. Также нет обязательных заголовков ответа.

Все это и многое другое в HTTP 1.1 - RFC 2616

Крис С
источник
15
Вы ошибаетесь В соответствии с RFC, который вы указали здесь: «Клиент ДОЛЖЕН включать поле заголовка Host во все сообщения запроса HTTP / 1.1». Таким образом, Hostзаголовок является обязательным.
user219882
2
Правильно, но не требуется, чтобы клиент использовал HTTP / 1.1.
Крис С
2
Content-Length или Transfer-Encoding являются обязательными только в том случае, если объект доставляется с запросом или ответом, и во многих случаях в запросе или ответе отсутствует объект (например, запрос GET или ответ 302).
Брэндон Роудс
6
Я не могу понизить голос, но этот ответ неверен. Пожалуйста, исправьте или удалите.
Викингстев
4
Я согласен с Vikingsteve. Ваш ответ подразумевает, что HTTP 1.1 не имеет требуемых заголовков.
nullstellensatz