Алексей Бережной - http-протокол
DESCRIPTION
Структурированный рассказ об основных принципах работы http-протокола.TRANSCRIPT
HTTP-протокол
Бережной Алексей разработчик интерфейсов
3
4
HTTP - один из основных протоколов
• Гипертекст
5
HTTP - один из основных протоколов
• Гипертекст • Картинки
6
HTTP - один из основных протоколов
• Гипертекст • Картинки • Сообщение между программами и серверами
7
HTTP - один из основных протоколов
• Гипертекст • Картинки • Сообщение между программами и серверами
• Видео
8
HTTP - один из основных протоколов
• Гипертекст • Картинки • Сообщение между программами и серверами
• Видео • Музыка
9
HTTP - один из основных протоколов
• Гипертекст • Картинки • Сообщение между программами и серверами
• Видео • Музыка • Торрент-трекеры
10
HTTP - один из основных протоколов
• Гипертекст • Картинки • Сообщение между программами и серверами
• Видео • Музыка • Торрент-трекеры • WebDAV, XML-RPC, SOAP
11
HTTP - один из основных протоколов
• Гипертекст • Картинки • Сообщение между программами и серверами
• Видео • Музыка • Торрент-трекеры • WebDAV, XML-RPC, SOAP • Можно использовать для обмена любыми данными
12
Некоторые факты
• Применяется в программах для скачивания обновлений
13
Некоторые факты
• Часто применяется в программах для скачивания обновлений
• В 2006 году обогнал P2P-сети по доле трафика, доля составила 46%
14
Некоторые факты
• Часто применяется в программах для скачивания обновлений
• В 2006 году обогнал P2P-сети по доле трафика, доля составила 46%
• Используется для управления сетевыми устройствами, такими как роутеры и принтеры
15
Некоторые факты
• Часто применяется в программах для скачивания обновлений
• В 2006 году обогнал P2P-сети по доле трафика, доля составила 46%
• Используется для управления сетевыми устройствами, такими как роутеры и принтеры
• Во многих браузерах не отображается в адресной строке
16
История развития
• HTTP / 0.9 – 1992 год • HTTP / 1.0 – 1996 год • HTTP / 1.1 – 1999 год
17
Достоинства
• Простота
18
Достоинства
• Простота • Расширяемость
19
Достоинства
• Простота • Расширяемость • Распространённость
20
Недостатки
• Размер
21
Недостатки
• Размер • Открытость
22
Недостатки
• Размер • Открытость • Нет механизма сохранения состояния
23
Недостатки
• Размер • Открытость • Нет механизма сохранения состояния • Сложности с авторизацией
24
Адресация ресурсов в сети
25
ftp://ftp.is.co.za/rfc/rfc1808.txt!!http://www.ietf.org/rfc/rfc2396.txt!!ldap://[2001:db8::7]/c=GB?objectClass?one!!mailto:[email protected]!!news:comp.infosystems.www.servers.unix!!tel:+1-816-555-1212!!telnet://192.0.2.16:80/!!urn:oasis:names:specification:docbook:dtd:xml:4.1.2!!
URI
26
Структура URL
<схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь>
27
Структура URL
<схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь>
ftp http https file mailto xmpp
28
Структура URL
<схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь> user:password
user
29
Структура URL
<схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь> localhost:8080
yandex.ru 213.180.204.11
30
Структура URL
<схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь> somedir/somefile.html
31
Структура URL
<схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь> text=http&from=fx3&lr=213
32
Структура URL
<схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь>
someanchor
33
Допустимые символы
• Латинские буквы
clck.ru/26aMp clck.ru/27hjp
34
Допустимые символы
• Латинские буквы • Цифры
clck.ru/26aMp clck.ru/27hjp
35
Допустимые символы
• Латинские буквы • Цифры • Специальные символы $-_.+!*'(),
clck.ru/26aMp clck.ru/27hjp
36
Допустимые символы
• Латинские буквы • Цифры • Специальные символы $-_.+!*'(), • Зарезервированные символы ; /? :@=&
clck.ru/26aMp clck.ru/27hjp
37
Символ ; можно использовать вместо &
URI "http://host/?x=1&y=2"!!<a href="http://host/?x=1&y=2">!!<a href="http://host/?x=1&y=2">!
Допустимые символы
clck.ru/26B9r
38
Кодирование URL
1. Кодирование символов
39
Кодирование URL
1. Кодирование символов 2. Запись кода в шестнадцатиричном представлении, и знак процента в начале
40
Кодирование URL
1. Кодирование символов 2. Запись кода в шестнадцатиричном представлении, и знак процента в начале
http://bla.com/Мир => http://bla.com/%D0%9C%D0%B8%D1%80
http://bla.com/мир => http://bla.com/%EC%E8%F0
41
Структура протокола
42
Структура протокола
1. Стартовая строка (Starting line)
43
Структура протокола
1. Стартовая строка (Starting line) 2. Заголовки (Headers)
44
Структура протокола
1. Стартовая строка (Starting line) 2. Заголовки (Headers) 3. Тело сообщения (Message body)
45
<Метод> <URI> HTTP/1.1!<Заголовки>!!Referer: http://www.yandex.ru/!
</Заголовки>!<Тело сообщения>!!param=value&a=1&b=2&c=3!
</Тело сообщения>!!
Структура протокола
46
Структура протокола
47
Структура протокола
48
Структура протокола
49
Структура протокола
50
GET /foo/bar!!!
Стартовая строка запроса
• GET <URI> (для HTTP / 0.9)
51
GET /foo/bar!!GET /foo/bar2 HTTP/1.0!!
Стартовая строка запроса
• GET <URI> (для HTTP / 0.9) • <метод> <URI> HTTP/<версия> (для HTTP / 1.0-‐1.1)
52
HTTP/1.0 200 OK!
Стартовая строка ответа
• HTTP/<версия> <код состояния> <пояснение>
53
Методы
• GET
54
Методы
• GET • POST
55
Методы
• GET • POST • OPTIONS, HEAD, PUT, PATCH, TRACE, LINK,
UNLINK, CONNECT
clck.ru/26B9h clck.ru/26B9j
56
GET /index.php?param=value&a=1&b=2&c=3 HTTP/1.1!<Заголовки>!
GET и POST
POST /index.php HTTP/1.1!<Заголовки>!<Тело сообщения>!!param=value&a=1&b=2&c=3!
</Тело сообщения>!!
57
GET и POST (отличия)
GET POST
идемпотентность
информация в стартовой строке
можно передавать файлы
58
Коды состояния HTTP
59
Информационные ответы (1xx)
• 100 Continue • 101 Switching protocols • 102 Progressing
clck.ru/28Tlv
60
Ответы успеха (2xx)
• 200 OK • 201 Created • 202 Accepted • 203 Non-Authoritative Information • 204 No Content • 205 Reset Content • 206 Partial Content • 207 Multi-Status • 226 IM Used
clck.ru/28Tlv
61
Ответы успеха (2xx)
62
Ответы перенаправления (3xx)
• 300 Multiple Choices • 301 Moved Permanently • 302 Moved Temporarily • 302 Found • 303 See Other • 304 Not Modified • 305 Use Proxy • 307 Temporary Redirect
clck.ru/28Tlv
63
Ответы перенаправления (3xx)
64
Ответы перенаправления (3xx)
65
Ошибки клиента (4xx)
• 400 Bad Request • 401 Unauthorized • 402 Payment Required • 403 Forbidden • 404 Not Found • 405 Method Not Allowed • 406 Not Acceptable • 407 Proxy Authentication Required • 408 Request Timeout
clck.ru/28Tlv
66
Ошибки клиента (4xx)
• 409 Conflict • 410 Gone • 411 Length Required • 412 Precondition Failed • 413 Request Entity Too Large • 414 Request-URI Too Large • 415 Unsupported Media Type • 416 Requested Range Not Satisfiable • 417 Expectation Failed
clck.ru/28Tlv
67
Ошибки клиента (4xx)
• 422 Unprocessable Entity • 423 Locked • 424 Failed Dependency • 425 Unordered Collection • 426 Upgrade Required • 449 Retry With • 456 Unrecoverable Error
clck.ru/28Tlv
68
Ошибки клиента (4xx)
69
Ошибки сервера (5xx)
• 500 Internal Server Error • 501 Not Implemented • 502 Bad Gateway • 503 Service Unavailable • 504 Gateway Timeout • 505 HTTP Version Not Supported
clck.ru/28Tlv
70
Ошибки сервера (5xx)
• 506 Variant Also Negotiates • 507 Insufficient Storage • 508 Loop Detected • 509 Bandwidth Limit Exceeded • 510 Not Extended
clck.ru/28Tlv
71
Ошибки сервера (5xx)
72
Заголовки HTTP
• General Headers
73
Заголовки HTTP
• General Headers • Request Headers
74
Заголовки HTTP
• General Headers • Request Headers • Response Headers
75
Заголовки HTTP
• General Headers • Request Headers • Response Headers • Entity Headers
76
Пример заголовков
77
!HTTP/1.1 200 OK!Date: Mon, 17 Sep 2012 13:05:11 GMT!Transfer-Encoding: chunked!Connection: keep-alive!Pragma: no-cache!Cache-Control: no-cache, no-store, max-age=0, must-revalidate!Server: nginx!Vary: X-Real-SSL-Protocol!Content-Type: text/html; charset=UTF-8!Expires: Mon, 17 Sep 2012 13:05:11 GMT!Content-Encoding: gzip!
Пример заголовков
78
General Headers
• Cache-Control • Connection • Date • Pragma • Trailer • Transfer-Encoding • Upgrade • Via • Warning
clck.ru/26Kxu
79
Request Headers
• Accept • Accept-Charset • Accept-Encoding • Accept-Language • Authorization • Expect • From • Host • If-Match
clck.ru/26Kxu
80
Request Headers
• If-Modified-Since • If-None-Match • If-Range • If-Unmodified-Since • Max-Forwards • Range • Referer • TE • User-Agent
clck.ru/26Kxu
81
Entity Headers запроса • Content-Encoding • Content-Language • Content-Length • Content-Location • Content-Range • Content-Type • Content-Version • Derived-From • Link • Title clck.ru/26Kxu
82
Response Headers
• Accept-Ranges • Age • Alternates • Etag • Location • Public • Retry-After • Server • Vary
clck.ru/26Kxu
83
Entity Headers ответа
• Allow • Content-Encoding • Content-Language • Content-Length • Content-Location • Content-Range • Content-Type • Content-Version
clck.ru/26Kxu
84
Entity Headers ответа
• Derived-From • Expires • Last-Modified • Link • Title
clck.ru/26Kxu
85
X-Frame-Options
X-Frame-Options: DENY;!// запретит загрузку через <iframe>!!!!
Нестандартные заголовки
86
X-Frame-Options
X-Frame-Options: DENY;!// запретит загрузку через <iframe>!!!X-Frame-Options: SAMEORIGIN; !// разрешит загрузку через <iframe>, но только если и <iframe>, и страница, его загружающая, находятся на одном домене!
Нестандартные заголовки
87
X-Requested-With
X-Requested-With: XMLHttpRequest!// используется для идентификации ajax запросов
Нестандартные заголовки
88
// используются чтобы пошутить =)!X-Awesome: If you found this header please email us about a writing job!!!X-Konkurentam: Preved!!X-ServerNickName: Wolverine!
Нестандартные заголовки
clck.ru/27QeD
89
Ключевые заголовки
90
Кодирование содержимого
• Accept-Encoding: <compress | gzip | deflate | identity>
• Content-Encoding
clck.ru/28Tm5
91
Кодирование передачи
• Transfer-Encoding: <chunked | compress | deflate | gzip | identity>
clck.ru/28Tm1
92
HTTP/1.1 200 OK! Server: nginx/1.0.4! Date: Thu, 06 Oct 2011 16:14:01 GMT! Content-Type: text/html! Transfer-Encoding: chunked! Connection: keep-alive! Vary: Accept-Encoding! X-Powered-By: PHP/5.3.6!! 25! This is the data in the first chunk!! 1C! and this is the second one!! 3! con! 8! sequence! 0!
Кодирование передачи
93
Множественное содержимое
• Content-Type: multipart/<form-data | byteranges | mixed>
clck.ru/26B9t
94
Кэширование
95
Заголовок Expires
Expires: Thu, 28 Jul 2022 21:01:19 GMT!
Кэширование
96
Заголовок Expires
GET
97
Заголовок Expires
GET
200 OK Expires: Thu, 28 Jul 2022 21:01:19 GMT
98
Заголовок Expires
99
Кэширование
Заголовок Last-Modified
Last-Modified: Tue, 18 Sep 2012 13:12:14 GMT!
100
Заголовок Last-Modified
GET
101
Заголовок Last-Modified
GET
200 OK Last-Modified: Tue, 18 Sep 2012 13:12:14 GMT
102
Заголовок Last-Modified
GET If-Modified-Since: Tue, 18 Sep 2012 13:12:14 GMT
103
Заголовок Last-Modified
GET If-Modified-Since: Tue, 18 Sep 2012 13:12:14 GMT
304 Not Modified Last-Modified: Tue, 18 Sep 2012 13:12:14 GMT
104
Заголовок Last-Modified
GET If-Modified-Since: Tue, 18 Sep 2012 13:12:14 GMT
304 Not Modified Last-Modified: Tue, 18 Sep 2012 13:12:14 GMT
105
Заголовок ETag
Etag: "3990584542"!
Кэширование
106
Заголовок ETag
GET
107
Заголовок ETag
GET
200 OK Etag: "3990584542"
108
Заголовок ETag
GET If-None-Match: "3990584542"
109
Заголовок ETag
GET If-None-Match: "3990584542"
304 Not Modified Etag: "3990584542"
110
Заголовок ETag
GET If-None-Match: "3990584542"
304 Not Modified Etag: "3990584542"
111
Заголовок Cache-Control
Cache-Control: max-age=3600, must-revalidate!
Кэширование
• max-age=n • s-maxage=n • public • private • no-cache • no-store • must-revalidate • proxy-revalidate • no-transform
clck.ru/1gJ5
112
Заголовок Cache-Control
113
Cookie
114
Cookie
• Аутентификация пользователя • Хранение информации о пользователе • Отслеживание переходов пользователя • Ведение статистики
115
Cookie
GET
116
Cookie
GET
200 OK Set-Cookie: name=value
117
Cookie
GET/POST Cookie: name=value
118
Кроме пары имя/значение, cookie может содержать срок действия, путь и доменное имя.
yandexuid=8187969851326274991; expires=Sat, 08 Jan 2022 09:43:11 GMT; path=/; domain=.yandex.ru!!userinfo=%7B%22resolution%22%3A%221600x1200%22%7D; expires=Thu, 15 Mar 2012 06:17:06 GMT; path=/; domain=.images.yandex.ru!
Атрибуты cookie
119
Кроме пары имя/значение, cookie может содержать срок действия, путь и доменное имя.
yandexuid=8187969851326274991; expires=Sat, 08 Jan 2022 09:43:11 GMT; path=/; domain=.yandex.ru!!userinfo=%7B%22resolution%22%3A%221600x1200%22%7D; expires=Thu, 15 Mar 2012 06:17:06 GMT; path=/; domain=.images.yandex.ru!
Атрибуты cookie
120
Кроме пары имя/значение, cookie может содержать срок действия, путь и доменное имя.
yandexuid=8187969851326274991; expires=Sat, 08 Jan 2022 09:43:11 GMT; path=/; domain=.yandex.ru!!userinfo=%7B%22resolution%22%3A%221600x1200%22%7D; expires=Thu, 15 Mar 2012 06:17:06 GMT; path=/; domain=.images.yandex.ru!
Атрибуты cookie
121
Кроме пары имя/значение, cookie может содержать срок действия, путь и доменное имя.
yandexuid=8187969851326274991; expires=Sat, 08 Jan 2022 09:43:11 GMT; path=/; domain=.yandex.ru!!userinfo=%7B%22resolution%22%3A%221600x1200%22%7D; expires=Thu, 15 Mar 2012 06:17:06 GMT; path=/; domain=.images.yandex.ru!
Атрибуты cookie
122
Кроме пары имя/значение, cookie может содержать срок действия, путь и доменное имя.
yandexuid=8187969851326274991; expires=Sat, 08 Jan 2022 09:43:11 GMT; path=/; domain=.yandex.ru!!userinfo=%7B%22resolution%22%3A%221600x1200%22%7D; expires=Thu, 15 Mar 2012 06:17:06 GMT; path=/; domain=.images.yandex.ru!
Атрибуты cookie
123
Кроме пары имя/значение, cookie может содержать срок действия, путь и доменное имя.
yandexuid=8187969851326274991; expires=Sat, 08 Jan 2022 09:43:11 GMT; path=/; domain=.yandex.ru!!userinfo=%7B%22resolution%22%3A%221600x1200%22%7D; expires=Thu, 15 Mar 2012 06:17:06 GMT; path=/; domain=.images.yandex.ru!
Атрибуты cookie
124
!Set-Cookie: <name>=<value>[; expires=<date>]![; domain=<domain_name>][; path=<some_path>]![; secure][; HttpOnly]!
Атрибуты cookie, безопасность
clck.ru/28TQT
125
Условия истечения срока хранения
• В конце сессии, если сookie не являются постоянными
126
Условия истечения срока хранения
• В конце сессии, если сookie не являются постоянными
• Дата истечения была указана и срок хранения вышел
127
Условия истечения срока хранения
• В конце сессии, если сookie не являются постоянными
• Дата истечения была указана и срок хранения вышел
• Браузер удалил сookie по запросу пользователя
128
Cookieless domain
Cookie ~ 4KB clck.ru/28TQN
129
HTTP Comet
clck.ru/27xOR
130
HTTP Comet
clck.ru/27xOR
131
HTTP Comet способы реализации
• Частый опрос (polling)
132
HTTP Comet способы реализации
• Частый опрос (polling) • Длинный опрос (long-poll)
133
HTTP Comet способы реализации
• Частый опрос (polling) • Длинный опрос (long-poll) • WebSocket
134
HTTPS
• Расширение HTTP • HTTP работающий через SSL и TLS • Используются сертификаты • Не кешируется
clck.ru/28TQX
135
HTTPS
• Расширение HTTP • HTTP работающий через SSL и TLS • Используются сертификаты • Не кешируется (миф clck.ru/28TQh)
clck.ru/28TQX
136
Инструменты
137
Инструменты
• tcpdump • Wireshark • Fiddler • Браузерные инструменты (HttpFox, FireBug,
Chrome DevTools, Opera Dragonfly)