Я понимаю, как выглядят HTTP-запросы со стороны клиента, но мне интересно, какие методы сервер использует для возврата страниц?
Клиент:
GET /index.html HTTP/1.1
Host foo.com:80
Сервер:
Does it perform an HTTP PUT of index.html ? If not, then what? Are HTTP methods used both ways?
Если в ответе не используются методы HTTP, то это просто пакет TCP (или несколько), содержащий полезную нагрузку? Есть ли в пакетах какая-либо информация, относящаяся к протоколу HTTP?
HTTP-запрос можно отправить одним из следующих способов:
Выдает HTTP-запрос GET. Этот метод заставляет веб-сервер возвращать запрошенную страницу.
Выдает HTTP-запрос HEAD. Этот метод заставляет веб-сервер возвращать только заголовки ответа, но не тело.
Выдает HTTP-запрос POST. Используйте этот метод для отправки данных на веб-сервер, например результатов формы, или загрузки файла.
Выдает HTTP-запрос PUT. Используйте этот метод для загрузки данных на веб-сервер. Запросы PUT встречаются нечасто.
Отправляет указанный тип HTTP-запроса на сервер.
После получения и интерпретации сообщения запроса сервер отвечает сообщением ответа HTTP.
Response = Status-Line ; Section 6.1
*(( general-header ; Section 4.5
| response-header ; Section 6.2
| entity-header ) CRLF) ; Section 7.1
CRLF
[ message-body ] ; Section 7.2
Информация для ответа была процитирована со следующего сайта: W3.org
Я отвечу на свой вопрос. Нет, методы HTTP используются только в заголовках запросов. Коды состояния используются в заголовках ответов. Я знаю, что просмотрел заголовки с обеих сторон и должен был сказать это, не просматривая его, но я не был уверен. Выгода от задания такого вопроса (который довольно легко найти) на полезном форуме заключается в том, что иногда вы узнаете что-то дополнительное или получаете некоторую перспективу, которая помогает углубить ваше понимание.
Ваш запрос должен соответствовать протоколу HTTP.
IE ваш заголовок должны заканчиваться пустой строкой:
GET /index.html HTTP/1.1
Host foo.com:80
Примечание: каждая строка должна заканчиваться CRLF, не только LF ни только CR:
00000000 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 30 5c 72 |GET / HTTP/1.0\r|
00000010 5c 6e 48 6f 73 74 3a 20 66 6f 6f 2e 63 6f 6d 3a |\nHost: foo.com:|
00000020 38 30 5c 72 5c 6e 5c 72 5c 6e 0a |80\r\n\r\n.|
Ответ сервера может соответствовать той же форме:
Заголовок - Пустая строка - Тело
Таким образом, вы можете удалить заголовок, используя sed
, для образца:
nc foo.com 80 <<<$'GET / HTTP/1.0\r\nHost: foo.com:80\r\n\r' |
sed '1,/^\r\?$/d' > index-of-foo.com.html
Или выгрузить только заголовок:
nc foo.com 80 <<<$'GET / HTTP/1.0\r\nHost: foo.com:80\r\n\r' |
sed '/^\r\?$/q'
Вы можете найти весь свой ответ в Интернете:
Первый справочный документ: на w3.org
Или в Википедии: http в Википедии
Заголовок ответа действительно содержит всю необходимую информацию для понимания того, что делать с ответом.
По сути, есть Тип содержимого, необходим, чтобы сообщить вашему браузеру, что с этим делать.
Серверу может потребоваться обработать некоторые данные для построения своего ответа, но между сервером и клиентом существует только одно (глупое) TCP-соединение.
Сервер ничего не может попросить клиента сделать ...
За исключением интерактивных конструкций между стеком обработки высокого уровня, например javascript, html5 (css), Ява, вспышка или другой Dilbertlight.