Алексей Бережной — «HTTP-протокл»

Post on 11-Nov-2014

10728 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

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: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

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&#38;y=2">!!<a href="http://host/?x=1&amp;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)

Бережной Алексей

разработчик интерфейсов

collapsus@yandex-team.ru

Спасибо!

top related