HTTP протокол

HTTP (англ. HyperText Transfer Protocol — «протокол передачи гипертекста») — протокол прикладного уровня передачи данных.

В Википедии все об этом протоколе подробно расписано. Тут я коротко опишу основные моменты, чтобы время от времени обращаться как к шпаргалке.

HTTP запрос.

Если ввести в адресную строку адрес какого-то ресурса и нажать на "Enter", то браузер отправит HTTP запрос на этот ресурс.
Правила HTTP запроса выглядят следующим образом:
1. Самая первая строка состоит из трех частей разделенных пробелом. В конце перевод на новую строку. Эта строка самая основная часть запроса.
2. Формат первой строки:
<Метод запроса><пробел><запрашиваемый ресурс><пробел><версия HTTP протокола, какую использует браузер><перевод на новую строку>

Например:

GET /dir/index.html HTTP/1.1

3. После основной части запроса идут HTTP заголовки. Каждый заголовок начинается с новой строки и в конце обязательно перевод на новую строку(\r\n).
4. Все заголовки кроме Host необязательны.
5. Формат заголовков выглядит следующим образом:
<Имя заголовка>:<пробел><Значение заголовка><перевод на новую строку>

Например:

Host: www.test.com
Accept: */*
Accept-Language: ru
Referer: http://yandex.ru/index.html
User-Agent: Mozilla 4.1

6. Концом запроса считается пустая строка

HTTP ответ.

Формат ответа такой же самый.
Первая строка будет выглядеть так:
<версия HTTP><пробел><код состояния><пробел><описание состояния><перевод на новую строку>
Заголовки имеют точно такой же формат как у запроса.
А после заголовков идет пустая строка и контент.

Пример:

HTTP/1.1 200 OK
Server: Microsoft IIS 6
Content-Type: text/html
Content-Length: 15345
Last-Modified: Sun, 3 Jul 2005 18:00:00 GMT

<html>
.......
</html>

HTTP POST запрос.

Формат POST запроса немножко отличается от GET:
1. В первой строке вместо GET ставим POST.
2. Добавляется заголовок "Content-Length", которая указывает длину строки запроса.
3. После заголовков идет одна пустая строка.
4. Дальше на новой строке идет строка запроса - query string в формате key1=value1&key2=value2
5. И пустая строка

Пример:

POST /action.php HTTP/1.1
Host: www.test.com
Content-Length: 20
Accept: */*
Accept-Language: ru
Referer: http://yandex.ru/index.html
User-Agent: Mozilla 4.1

login=vasya$pswd=parol

COOKIE

Если на сервере устанавливается куки, то у нас будет такая последовательность работы.

Когда клиент обращается на сервер впервые:

GET /index.php?name=Vasya HTTP/1.1
Host: www.test.com
Accept: */*
Accept-Language: ru
User-Agent: Mozilla 4.1

Ответ сервера, который взял значение $_GET['name'] и установил куки setcookie('username', 'Vasya') :

HTTP/1.1 200 OK
Server: Microsoft IIS 6
Content-Type: text/html
Content-Length: 15345
Last-Modified: Sun, 3 Jul 2005 18:00:00 GMT
Set-Cookie: username=Vasya

Конечно, на самом деле куки устанавливается на стороне клиента, т.е сервер говорит браузеру установить куки и передавать её при каждом обращении. И при следующем обращении у нас уже будет такой запрос:

GET /index.php HTTP/1.1
Host: www.test.com
Accept: */*
Accept-Language: ru
User-Agent: Mozilla 4.1
Cookie: username=Vasya

Можно так работать в командной строке с HTTP протоколом:

>telnet
>open www.test.com 80
GET / HTTP/1.1
Host: www.test.com

Запускаем утилиту telnet. Открываем соединение - open <HostName> <port>
Дальше обычный HTTP запрос. Не забываем переносы (Enter) в конце строк.

https://ru.wikipedia.org/wiki/HTTP

комментарии (0)