Алексей Бережной — «http-протокл»
DESCRIPTION
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 /foo/bar2 HTTP/1.0!!
Стартовая строка запроса
• GET <URI> (для HTTP / 0.9) • <метод> <URI> HTTP/<версия> (для HTTP / 1.0-‐1.1)
51
HTTP/1.0 200 OK!
Стартовая строка ответа
• HTTP/<версия> <код состояния> <пояснение>
52
Методы
• GET
53
Методы
• GET • POST
54
Методы
• GET • POST • OPTIONS, HEAD, PUT, PATCH, TRACE, LINK,
UNLINK, CONNECT
clck.ru/26B9h clck.ru/26B9j
55
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!
</Тело сообщения>!!
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
Коды состояния HTTP
58
Информационные ответы (1xx)
• 100 Continue • 101 Switching protocols • 102 Progressing
clck.ru/28Tlv
59
Ответы успеха (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
60
Ответы успеха (2xx)
61
Ответы перенаправления (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
62
Ответы перенаправления (3xx)
63
Ответы перенаправления (3xx)
64
Ошибки клиента (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
65
Ошибки клиента (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
66
Ошибки клиента (4xx)
• 422 Unprocessable Entity • 423 Locked • 424 Failed Dependency • 425 Unordered Collection • 426 Upgrade Required • 449 Retry With • 456 Unrecoverable Error
clck.ru/28Tlv
67
Ошибки клиента (4xx)
68
Ошибки сервера (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
69
Ошибки сервера (5xx)
• 506 Variant Also Negotiates • 507 Insufficient Storage • 508 Loop Detected • 509 Bandwidth Limit Exceeded • 510 Not Extended
clck.ru/28Tlv
70
Ошибки сервера (5xx)
71
Заголовки HTTP
• General Headers
72
Заголовки HTTP
• General Headers • Request Headers
73
Заголовки HTTP
• General Headers • Request Headers • Response Headers
74
Заголовки HTTP
• General Headers • Request Headers • Response Headers • Entity Headers
75
Пример заголовков
76
!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!
Пример заголовков
77
General Headers
• Cache-Control • Connection • Date • Pragma • Trailer • Transfer-Encoding • Upgrade • Via • Warning
clck.ru/26Kxu
78
Request Headers
• Accept • Accept-Charset • Accept-Encoding • Accept-Language • Authorization • Expect • From • Host • If-Match
clck.ru/26Kxu
79
Request Headers
• If-Modified-Since • If-None-Match • If-Range • If-Unmodified-Since • Max-Forwards • Range • Referer • TE • User-Agent
clck.ru/26Kxu
80
Entity Headers запроса • Content-Encoding • Content-Language • Content-Length • Content-Location • Content-Range • Content-Type • Content-Version • Derived-From • Link • Title clck.ru/26Kxu
81
Response Headers
• Accept-Ranges • Age • Alternates • Etag • Location • Public • Retry-After • Server • Vary
clck.ru/26Kxu
82
Entity Headers ответа
• Allow • Content-Encoding • Content-Language • Content-Length • Content-Location • Content-Range • Content-Type • Content-Version
clck.ru/26Kxu
83
Entity Headers ответа
• Derived-From • Expires • Last-Modified • Link • Title
clck.ru/26Kxu
84
X-Frame-Options
X-Frame-Options: DENY;!// запретит загрузку через <iframe>!!!!
Нестандартные заголовки
85
X-Frame-Options
X-Frame-Options: DENY;!// запретит загрузку через <iframe>!!!X-Frame-Options: SAMEORIGIN; !// разрешит загрузку через <iframe>, но только если и <iframe>, и страница, его загружающая, находятся на одном домене!
Нестандартные заголовки
86
X-Requested-With
X-Requested-With: XMLHttpRequest!// используется для идентификации ajax запросов
Нестандартные заголовки
87
// используются чтобы пошутить =)!X-Awesome: If you found this header please email us about a writing job!!!X-Konkurentam: Preved!!X-ServerNickName: Wolverine!
Нестандартные заголовки
clck.ru/27QeD
88
Ключевые заголовки
89
Кодирование содержимого
• Accept-Encoding: <compress | gzip | deflate | identity>
• Content-Encoding
clck.ru/28Tm5
90
Кодирование передачи
• Transfer-Encoding: <chunked | compress | deflate | gzip | identity>
clck.ru/28Tm1
91
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!
Кодирование передачи
92
Множественное содержимое
• Content-Type: multipart/<form-data | byteranges | mixed>
clck.ru/26B9t
93
Кэширование
94
Заголовок Expires
Expires: Thu, 28 Jul 2022 21:01:19 GMT!
Кэширование
95
Заголовок Expires
GET
96
Заголовок Expires
GET
200 OK Expires: Thu, 28 Jul 2022 21:01:19 GMT
97
Заголовок Expires
98
Кэширование
Заголовок Last-Modified
Last-Modified: Tue, 18 Sep 2012 13:12:14 GMT!
99
Заголовок Last-Modified
GET
100
Заголовок Last-Modified
GET
200 OK Last-Modified: Tue, 18 Sep 2012 13:12:14 GMT
101
Заголовок Last-Modified
GET If-Modified-Since: Tue, 18 Sep 2012 13:12:14 GMT
102
Заголовок 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
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
Заголовок ETag
Etag: "3990584542"!
Кэширование
105
Заголовок ETag
GET
106
Заголовок ETag
GET
200 OK Etag: "3990584542"
107
Заголовок ETag
GET If-None-Match: "3990584542"
108
Заголовок ETag
GET If-None-Match: "3990584542"
304 Not Modified Etag: "3990584542"
109
Заголовок ETag
GET If-None-Match: "3990584542"
304 Not Modified Etag: "3990584542"
110
Заголовок 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
111
Заголовок Cache-Control
112
Cookie
113
Cookie
• Аутентификация пользователя • Хранение информации о пользователе • Отслеживание переходов пользователя • Ведение статистики
114
Cookie
GET
115
Cookie
GET
200 OK Set-Cookie: name=value
116
Cookie
GET/POST Cookie: name=value
117
Кроме пары имя/значение, 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
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
!Set-Cookie: <name>=<value>[; expires=<date>]![; domain=<domain_name>][; path=<some_path>]![; secure][; HttpOnly]!
Атрибуты cookie, безопасность
clck.ru/28TQT
123
Условия истечения срока хранения
• В конце сессии, если сookie не являются постоянными
124
Условия истечения срока хранения
• В конце сессии, если сookie не являются постоянными
• Дата истечения была указана и срок хранения вышел
125
Условия истечения срока хранения
• В конце сессии, если сookie не являются постоянными
• Дата истечения была указана и срок хранения вышел
• Браузер удалил сookie по запросу пользователя
126
Cookieless domain
Cookie ~ 4KB clck.ru/28TQN
127
HTTP Comet
clck.ru/27xOR
128
HTTP Comet
clck.ru/27xOR
129
HTTP Comet способы реализации
• Частый опрос (polling)
130
HTTP Comet способы реализации
• Частый опрос (polling) • Длинный опрос (long-poll)
131
HTTP Comet способы реализации
• Частый опрос (polling) • Длинный опрос (long-poll) • WebSocket
132
HTTPS
• Расширение HTTP • HTTP работающий через SSL и TLS • Используются сертификаты • Не кешируется
clck.ru/28TQX
133
HTTPS
• Расширение HTTP • HTTP работающий через SSL и TLS • Используются сертификаты • Не кешируется (миф clck.ru/28TQh)
clck.ru/28TQX
134
Инструменты
135
Инструменты
• tcpdump • Wireshark • Fiddler • Браузерные инструменты (HttpFox, FireBug,
Chrome DevTools, Opera Dragonfly)