HTTP-протокол
Бережной Алексей
разработчик интерфейсов
3
4
HTTP - один из основных протоколов
•  HTML / JS / CSS
•  Изображения
•  Видео
•  Музыка
•  Сообщение между программами и...
5
6
Уровни протоколов
Прикладной	
   HTTP	
  
Транспортный	
   TCP	
  
Сетевой	
   IP	
  
Канальный	
   Ethernet	
  
7
TCP
Клиент	

 Сервер	

время
8
TCP
Клиент	

 Сервер	

время	

SYN
9
TCP
Клиент	

 Сервер	

время	

SYN	

SYN / ACK
10
TCP
Клиент	

 Сервер	

время	

SYN	

ACK	

SYN / ACK
11
TCP
Клиент	

 Сервер	

время	

SYN	

ACK	

SYN / ACK	

ESTABLISHED
12
TCP
Клиент	

 Сервер	

время	

SYN	

ACK	

SYN / ACK	

ESTABLISHED
13
Пропускная способность и задержка
Клиент	

 Сервер	

Клиент	

 Сервер	

clck.ru/8pZbw
14
Задержка у мобильных
15
Задержка у мобильных
16
Задержка у мобильных
17
Задержка у мобильных
clck.ru/8pZc6
18
На что тратит время HTTP запрос
•  DNS-запрос
•  Установка соединения
•  Отправка данных
•  Ожидание ответа
•  Получени...
19
История развития
•  HTTP / 0.9 – 1992 год
•  HTTP / 1.0 – 1996 год
•  HTTP / 1.1 – 1999 год
•  HTTP / 2.0 – 2014 год
20
Достоинства
•  Простота
•  Расширяемость
•  Распространённость
21
Недостатки
•  Размер
•  Открытость
•  Нет механизма сохранения состояния
•  Сложности с авторизацией
22
Адресация
ресурсов в сети
23
ftp://ftp.is.co.za/rfc/rfc1808.txt!
!
http://www.ietf.org/rfc/rfc2396.txt!
!
ldap://[2001:db8::7]/c=GB?objectClass?one!...
24
Структура URL
<схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь>
25
Структура URL
<схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь>
ftp	

http	

https	

file	

mailto...
26
Структура URL
<схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь>
user:password	

user
27
Структура URL
<схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь>
localhost:8080	

yandex.ru	

213....
28
Структура URL
<схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь>
somedir/somefile.html
29
Структура URL
<схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь>
text=haha&from=fx3&lr=213
30
Структура URL
<схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь>
someanchor
31
Допустимые символы
•  Латинские буквы
•  Цифры
•  Специальные символы $-_.+!*'(),
•  Зарезервированные символы ; /? :@=...
32
Символ ; можно использовать вместо &
URI "http://host/?x=1&y=2"!
!
<a href="http://host/?x=1&y=2">!
!
<a href="http://h...
33
Кодирование URL
1. Кодирование символов
2. Запись кода в шестнадцатиричном
представлении, и знак процента в начале
http...
34
Кодирование URL (punycode)
•  президент.рф => xn--d1abbgf6aiiy.xn--p1ai
35
Структура
протокола
36
<Метод> <URI> HTTP/1.1!
<Заголовки>!
!Referer: http://www.yandex.ru/!
</Заголовки>!
<Тело сообщения>!
!param=value&a=1&...
37
Структура протокола
38
Структура протокола
39
Структура протокола
40
Структура протокола
41
GET /foo/bar!
!
GET /foo/bar2 HTTP/1.0!
!
Стартовая строка запроса
•  GET	
  <URI>	
  (для	
  HTTP	
  /	
  0.9)	
  
•  ...
42
HTTP/1.0 200 OK!
Стартовая строка ответа
•  HTTP/<версия>	
  <код	
  состояния>	
  <пояснение>	
  
43
Методы
•  GET
•  POST
•  OPTIONS, HEAD, PUT, PATCH, TRACE, LINK,
UNLINK, CONNECT
clck.ru/26B9h 	

clck.ru/26B9j
44
GET /index.php?param=value&a=1&b=2&c=3 HTTP/1.1!
<Заголовки>!
GET и POST
POST /index.php HTTP/1.1!
<Заголовки>!
<Тело с...
45
Коды состояния
HTTP
46
Коды состояния HTTP
•  (1xx) Информационные ответ
•  (2xx) Ответы успеха
• (3xx) Ответы перенаправления
• (4xx) Ошибки ...
47
Ответы успеха (2xx)
48
Ответы перенаправления (3xx)
49
Ответы перенаправления (3xx)
50
Ошибки клиента (4xx)
51
Ошибки сервера (5xx)
52
Заголовки
HTTP
53
Заголовки HTTP
•  General Headers
•  Request Headers
•  Response Headers
•  Entity Headers
clck.ru/26Kxu
54
Пример заголовков
55
!
HTTP/1.1 200 OK!
Date: Mon, 17 Sep 2012 13:05:11 GMT!
Transfer-Encoding: chunked!
Connection: keep-alive!
Pragma: no-...
56
X-Frame-Options
X-Frame-Options: DENY;!
// запретит загрузку через <iframe>!
!
!
	
!
Нестандартные заголовки
57
X-Frame-Options
X-Frame-Options: DENY;!
// запретит загрузку через <iframe>!
!
!
X-Frame-Options: SAMEORIGIN; !
// разр...
58
X-Requested-With
X-Requested-With: XMLHttpRequest!
// используется для идентификации ajax запросов	
Нестандартные загол...
59
// используются чтобы пошутить =)	
!
X-Awesome: If you found this header please email us
about a writing job!
!
!
X-Kon...
60
Кодирование содержимого
•  Accept-Encoding: <compress | gzip | deflate |
identity>
•  Content-Encoding
clck.ru/28Tm5
61
Кодирование передачи
•  Transfer-Encoding: <chunked | compress |
deflate | gzip | identity>
clck.ru/28Tm1
62
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: ...
63
Постоянное соединение
•  Connection: Keep-Alive | close
clck.ru/8pRkR
64
Кэширование
65
Кеширование
•  Срок годности
•  Ревалидация
66
Кэширование (срок годности)
GET
67
Кэширование (срок годности)
GET	

200 OK	

Cach-Control / Expires
68
Кэширование (срок годности)
69
Кэширование (ревалидация)
GET
70
Кэширование (ревалидация)
GET	

200 OK	

Last-Modified / ETag
71
Кэширование (ревалидация)
GET	

If-Modified-Since / If-None-Match
72
Кэширование (ревалидация)
GET	

If-Modified-Since / If-None-Match	

304 Not Modified	

Last-Modified / ETag
73
Кэширование (ревалидация)
GET	

If-Modified-Since / If-None-Match	

304 Not Modified	

Last-Modified / ETag
74
Cookie
75
Cookie
•  Аутентификация пользователя
•  Хранение информации о пользователе
•  Отслеживание переходов пользователя
•  В...
76
Cookie
GET
77
Cookie
GET	

200 OK	

Set-Cookie: name=value
78
Cookie
GET/POST	

Cookie: name=value
79
Кроме пары имя/значение, cookie может содержать срок
действия, путь и доменное имя.
yandexuid=8187969851326274991; expi...
80
Кроме пары имя/значение, cookie может содержать срок
действия, путь и доменное имя.
yandexuid=8187969851326274991; expi...
81
Кроме пары имя/значение, cookie может содержать срок
действия, путь и доменное имя.
yandexuid=8187969851326274991; expi...
82
Кроме пары имя/значение, cookie может содержать срок
действия, путь и доменное имя.
yandexuid=8187969851326274991; expi...
83
Кроме пары имя/значение, cookie может содержать срок
действия, путь и доменное имя.
yandexuid=8187969851326274991; expi...
84
!
Set-Cookie: <name>=<value>[; expires=<date>]!
[; domain=<domain_name>][; path=<some_path>]!
[; secure][; HttpOnly]!
А...
85
Удаление cookie
•  В конце сессии, если сookie не являются
постоянными
•  Дата истечения была указана и срок
хранения в...
86
Cookieless domain
Cookie ~ 4KB	

 clck.ru/28TQN
87
HTTP Comet
clck.ru/27xOR
88
HTTP Comet
clck.ru/27xOR
89
HTTP Comet способы реализации
•  Частый опрос (polling)
•  Длинный опрос (long-poll)
•  WebSocket
90
HTTPS
•  Расширение HTTP
•  HTTP работающий через SSL и TLS
•  Используются сертификаты
•  Не кешируется
clck.ru/28TQX
91
HTTPS
•  Расширение HTTP
•  HTTP работающий через SSL и TLS
•  Используются сертификаты
•  Не кешируется (миф clck.ru/2...
92
SPDY
HTML 2.0
93
SPDY
clck.ru/8p4P2
94
SPDY
•  Сжатие HTTP заголовков
•  Бинарный протокол
•  Мультиплексирование
•  Система приоритетов
•  Полнодуплексный ре...
95
HTTP 2.0
•  Разработка с 2012 г. по 2014 г.
•  Основан на SPDY
96
Инструменты
97
Инструменты
•  tcpdump
•  Wireshark
•  Fiddler
•  Браузерные инструменты (HttpFox, FireBug,
Chrome DevTools, Opera Drag...
Бережной Алексей
разработчик интерфейсов
collapsus@yandex-team.ru
Спасибо!
2013 09 14 http-протокол
Upcoming SlideShare
Loading in …5
×

2013 09 14 http-протокол

2,983 views
2,892 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,983
On SlideShare
0
From Embeds
0
Number of Embeds
2,464
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

2013 09 14 http-протокол

  1. 1. HTTP-протокол Бережной Алексей разработчик интерфейсов
  2. 2. 3
  3. 3. 4 HTTP - один из основных протоколов •  HTML / JS / CSS •  Изображения •  Видео •  Музыка •  Сообщение между программами и серверами •  WebDAV, XML-RPC, SOAP •  Можно использовать для обмена любыми данными
  4. 4. 5
  5. 5. 6 Уровни протоколов Прикладной   HTTP   Транспортный   TCP   Сетевой   IP   Канальный   Ethernet  
  6. 6. 7 TCP Клиент Сервер время
  7. 7. 8 TCP Клиент Сервер время SYN
  8. 8. 9 TCP Клиент Сервер время SYN SYN / ACK
  9. 9. 10 TCP Клиент Сервер время SYN ACK SYN / ACK
  10. 10. 11 TCP Клиент Сервер время SYN ACK SYN / ACK ESTABLISHED
  11. 11. 12 TCP Клиент Сервер время SYN ACK SYN / ACK ESTABLISHED
  12. 12. 13 Пропускная способность и задержка Клиент Сервер Клиент Сервер clck.ru/8pZbw
  13. 13. 14 Задержка у мобильных
  14. 14. 15 Задержка у мобильных
  15. 15. 16 Задержка у мобильных
  16. 16. 17 Задержка у мобильных clck.ru/8pZc6
  17. 17. 18 На что тратит время HTTP запрос •  DNS-запрос •  Установка соединения •  Отправка данных •  Ожидание ответа •  Получение данных
  18. 18. 19 История развития •  HTTP / 0.9 – 1992 год •  HTTP / 1.0 – 1996 год •  HTTP / 1.1 – 1999 год •  HTTP / 2.0 – 2014 год
  19. 19. 20 Достоинства •  Простота •  Расширяемость •  Распространённость
  20. 20. 21 Недостатки •  Размер •  Открытость •  Нет механизма сохранения состояния •  Сложности с авторизацией
  21. 21. 22 Адресация ресурсов в сети
  22. 22. 23 ftp://ftp.is.co.za/rfc/rfc1808.txt! ! http://www.ietf.org/rfc/rfc2396.txt! ! ldap://[2001:db8::7]/c=GB?objectClass?one! ! mailto:John.Doe@example.com! ! 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
  23. 23. 24 Структура URL <схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь>
  24. 24. 25 Структура URL <схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь> ftp http https file mailto xmpp
  25. 25. 26 Структура URL <схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь> user:password user
  26. 26. 27 Структура URL <схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь> localhost:8080 yandex.ru 213.180.204.11
  27. 27. 28 Структура URL <схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь> somedir/somefile.html
  28. 28. 29 Структура URL <схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь> text=haha&from=fx3&lr=213
  29. 29. 30 Структура URL <схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь> someanchor
  30. 30. 31 Допустимые символы •  Латинские буквы •  Цифры •  Специальные символы $-_.+!*'(), •  Зарезервированные символы ; /? :@=& clck.ru/26aMp clck.ru/27hjp
  31. 31. 32 Символ ; можно использовать вместо & URI "http://host/?x=1&y=2"! ! <a href="http://host/?x=1&y=2">! ! <a href="http://host/?x=1&amp;y=2">! Допустимые символы clck.ru/26B9r
  32. 32. 33 Кодирование URL 1. Кодирование символов 2. Запись кода в шестнадцатиричном представлении, и знак процента в начале http://bla.com/Мир => http://bla.com/%D0%9C%D0%B8%D1%80 http://bla.com/мир => http://bla.com/%EC%E8%F0
  33. 33. 34 Кодирование URL (punycode) •  президент.рф => xn--d1abbgf6aiiy.xn--p1ai
  34. 34. 35 Структура протокола
  35. 35. 36 <Метод> <URI> HTTP/1.1! <Заголовки>! !Referer: http://www.yandex.ru/! </Заголовки>! <Тело сообщения>! !param=value&a=1&b=2&c=3! </Тело сообщения>! ! Структура протокола
  36. 36. 37 Структура протокола
  37. 37. 38 Структура протокола
  38. 38. 39 Структура протокола
  39. 39. 40 Структура протокола
  40. 40. 41 GET /foo/bar! ! GET /foo/bar2 HTTP/1.0! ! Стартовая строка запроса •  GET  <URI>  (для  HTTP  /  0.9)   •  <метод>  <URI>  HTTP/<версия>  (для  HTTP  /  1.0-­‐1.1)  
  41. 41. 42 HTTP/1.0 200 OK! Стартовая строка ответа •  HTTP/<версия>  <код  состояния>  <пояснение>  
  42. 42. 43 Методы •  GET •  POST •  OPTIONS, HEAD, PUT, PATCH, TRACE, LINK, UNLINK, CONNECT clck.ru/26B9h clck.ru/26B9j
  43. 43. 44 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! </Тело сообщения>! !
  44. 44. 45 Коды состояния HTTP
  45. 45. 46 Коды состояния HTTP •  (1xx) Информационные ответ •  (2xx) Ответы успеха • (3xx) Ответы перенаправления • (4xx) Ошибки клиента • (5xx) Ошибки сервера clck.ru/28Tlv
  46. 46. 47 Ответы успеха (2xx)
  47. 47. 48 Ответы перенаправления (3xx)
  48. 48. 49 Ответы перенаправления (3xx)
  49. 49. 50 Ошибки клиента (4xx)
  50. 50. 51 Ошибки сервера (5xx)
  51. 51. 52 Заголовки HTTP
  52. 52. 53 Заголовки HTTP •  General Headers •  Request Headers •  Response Headers •  Entity Headers clck.ru/26Kxu
  53. 53. 54 Пример заголовков
  54. 54. 55 ! 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! Пример заголовков
  55. 55. 56 X-Frame-Options X-Frame-Options: DENY;! // запретит загрузку через <iframe>! ! ! ! Нестандартные заголовки
  56. 56. 57 X-Frame-Options X-Frame-Options: DENY;! // запретит загрузку через <iframe>! ! ! X-Frame-Options: SAMEORIGIN; ! // разрешит загрузку через <iframe>, но только если и <iframe>, и страница, его загружающая, находятся на одном домене ! Нестандартные заголовки
  57. 57. 58 X-Requested-With X-Requested-With: XMLHttpRequest! // используется для идентификации ajax запросов Нестандартные заголовки
  58. 58. 59 // используются чтобы пошутить =) ! X-Awesome: If you found this header please email us about a writing job! ! ! X-Konkurentam: Preved! ! X-ServerNickName: Wolverine! Нестандартные заголовки clck.ru/27QeD
  59. 59. 60 Кодирование содержимого •  Accept-Encoding: <compress | gzip | deflate | identity> •  Content-Encoding clck.ru/28Tm5
  60. 60. 61 Кодирование передачи •  Transfer-Encoding: <chunked | compress | deflate | gzip | identity> clck.ru/28Tm1
  61. 61. 62 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! Кодирование передачи
  62. 62. 63 Постоянное соединение •  Connection: Keep-Alive | close clck.ru/8pRkR
  63. 63. 64 Кэширование
  64. 64. 65 Кеширование •  Срок годности •  Ревалидация
  65. 65. 66 Кэширование (срок годности) GET
  66. 66. 67 Кэширование (срок годности) GET 200 OK Cach-Control / Expires
  67. 67. 68 Кэширование (срок годности)
  68. 68. 69 Кэширование (ревалидация) GET
  69. 69. 70 Кэширование (ревалидация) GET 200 OK Last-Modified / ETag
  70. 70. 71 Кэширование (ревалидация) GET If-Modified-Since / If-None-Match
  71. 71. 72 Кэширование (ревалидация) GET If-Modified-Since / If-None-Match 304 Not Modified Last-Modified / ETag
  72. 72. 73 Кэширование (ревалидация) GET If-Modified-Since / If-None-Match 304 Not Modified Last-Modified / ETag
  73. 73. 74 Cookie
  74. 74. 75 Cookie •  Аутентификация пользователя •  Хранение информации о пользователе •  Отслеживание переходов пользователя •  Ведение статистики
  75. 75. 76 Cookie GET
  76. 76. 77 Cookie GET 200 OK Set-Cookie: name=value
  77. 77. 78 Cookie GET/POST Cookie: name=value
  78. 78. 79 Кроме пары имя/значение, 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
  79. 79. 80 Кроме пары имя/значение, 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
  80. 80. 81 Кроме пары имя/значение, 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
  81. 81. 82 Кроме пары имя/значение, 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
  82. 82. 83 Кроме пары имя/значение, 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
  83. 83. 84 ! Set-Cookie: <name>=<value>[; expires=<date>]! [; domain=<domain_name>][; path=<some_path>]! [; secure][; HttpOnly]! Атрибуты cookie, безопасность clck.ru/28TQT
  84. 84. 85 Удаление cookie •  В конце сессии, если сookie не являются постоянными •  Дата истечения была указана и срок хранения вышел •  Браузер удалил сookie по запросу пользователя
  85. 85. 86 Cookieless domain Cookie ~ 4KB clck.ru/28TQN
  86. 86. 87 HTTP Comet clck.ru/27xOR
  87. 87. 88 HTTP Comet clck.ru/27xOR
  88. 88. 89 HTTP Comet способы реализации •  Частый опрос (polling) •  Длинный опрос (long-poll) •  WebSocket
  89. 89. 90 HTTPS •  Расширение HTTP •  HTTP работающий через SSL и TLS •  Используются сертификаты •  Не кешируется clck.ru/28TQX
  90. 90. 91 HTTPS •  Расширение HTTP •  HTTP работающий через SSL и TLS •  Используются сертификаты •  Не кешируется (миф clck.ru/28TQh) clck.ru/28TQX
  91. 91. 92 SPDY HTML 2.0
  92. 92. 93 SPDY clck.ru/8p4P2
  93. 93. 94 SPDY •  Сжатие HTTP заголовков •  Бинарный протокол •  Мультиплексирование •  Система приоритетов •  Полнодуплексный режим •  Не нужно всё переписывать clck.ru/8p4P2
  94. 94. 95 HTTP 2.0 •  Разработка с 2012 г. по 2014 г. •  Основан на SPDY
  95. 95. 96 Инструменты
  96. 96. 97 Инструменты •  tcpdump •  Wireshark •  Fiddler •  Браузерные инструменты (HttpFox, FireBug, Chrome DevTools, Opera Dragonfly)
  97. 97. Бережной Алексей разработчик интерфейсов collapsus@yandex-team.ru Спасибо!

×