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

98

Upload: yandex

Post on 16-Jun-2015

2.807 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 2013 09 14 http-протокол
Page 2: 2013 09 14 http-протокол

HTTP-протокол

Бережной Алексей разработчик интерфейсов

Page 3: 2013 09 14 http-протокол

3

Page 4: 2013 09 14 http-протокол

4

HTTP - один из основных протоколов

• HTML / JS / CSS • Изображения • Видео • Музыка • Сообщение между программами и серверами

• WebDAV, XML-RPC, SOAP • Можно использовать для обмена любыми данными

Page 5: 2013 09 14 http-протокол

5

Page 6: 2013 09 14 http-протокол

6

Уровни протоколов

Прикладной   HTTP  

Транспортный   TCP  

Сетевой   IP  

Канальный   Ethernet  

Page 7: 2013 09 14 http-протокол

7

TCP

Клиент Сервер врем

я

Page 8: 2013 09 14 http-протокол

8

TCP

Клиент Сервер врем

я

SYN

Page 9: 2013 09 14 http-протокол

9

TCP

Клиент Сервер врем

я

SYN

SYN / ACK

Page 10: 2013 09 14 http-протокол

10

TCP

Клиент Сервер врем

я

SYN

ACK

SYN / ACK

Page 11: 2013 09 14 http-протокол

11

TCP

Клиент Сервер врем

я

SYN

ACK

SYN / ACK

ESTABLISHED

Page 12: 2013 09 14 http-протокол

12

TCP

Клиент Сервер врем

я

SYN

ACK

SYN / ACK

ESTABLISHED

Page 13: 2013 09 14 http-протокол

13

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

Клиент Сервер

Клиент Сервер

clck.ru/8pZbw

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

14

Задержка у мобильных

Page 15: 2013 09 14 http-протокол

15

Задержка у мобильных

Page 16: 2013 09 14 http-протокол

16

Задержка у мобильных

Page 17: 2013 09 14 http-протокол

17

Задержка у мобильных

clck.ru/8pZc6

Page 18: 2013 09 14 http-протокол

18

На что тратит время HTTP запрос

• DNS-запрос • Установка соединения • Отправка данных • Ожидание ответа • Получение данных

Page 19: 2013 09 14 http-протокол

19

История развития

• HTTP / 0.9 – 1992 год • HTTP / 1.0 – 1996 год • HTTP / 1.1 – 1999 год • HTTP / 2.0 – 2014 год

Page 20: 2013 09 14 http-протокол

20

Достоинства

• Простота • Расширяемость • Распространённость

Page 21: 2013 09 14 http-протокол

21

Недостатки

• Размер • Открытость • Нет механизма сохранения состояния • Сложности с авторизацией

Page 22: 2013 09 14 http-протокол

22

Адресация ресурсов в сети

Page 23: 2013 09 14 http-протокол

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

Page 24: 2013 09 14 http-протокол

24

Структура URL

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

Page 25: 2013 09 14 http-протокол

25

Структура URL

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

ftp http https file mailto xmpp

Page 26: 2013 09 14 http-протокол

26

Структура URL

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

user

Page 27: 2013 09 14 http-протокол

27

Структура URL

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

yandex.ru 213.180.204.11

Page 28: 2013 09 14 http-протокол

28

Структура URL

<схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь> somedir/somefile.html

Page 29: 2013 09 14 http-протокол

29

Структура URL

<схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь> text=haha&from=fx3&lr=213

Page 30: 2013 09 14 http-протокол

30

Структура URL

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

someanchor

Page 31: 2013 09 14 http-протокол

31

Допустимые символы

• Латинские буквы • Цифры • Специальные символы $-_.+!*'(), • Зарезервированные символы ; /? :@=&

clck.ru/26aMp clck.ru/27hjp

Page 32: 2013 09 14 http-протокол

32

Символ ; можно использовать вместо &

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

Page 33: 2013 09 14 http-протокол

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

Page 34: 2013 09 14 http-протокол

34

Кодирование URL (punycode)

• президент.рф => xn--d1abbgf6aiiy.xn--p1ai

Page 35: 2013 09 14 http-протокол

35

Структура протокола

Page 36: 2013 09 14 http-протокол

36

<Метод> <URI> HTTP/1.1!<Заголовки>!!Referer: http://www.yandex.ru/!

</Заголовки>!<Тело сообщения>!!param=value&a=1&b=2&c=3!

</Тело сообщения>!!

Структура протокола

Page 37: 2013 09 14 http-протокол

37

Структура протокола

Page 38: 2013 09 14 http-протокол

38

Структура протокола

Page 39: 2013 09 14 http-протокол

39

Структура протокола

Page 40: 2013 09 14 http-протокол

40

Структура протокола

Page 41: 2013 09 14 http-протокол

41

GET /foo/bar!!GET /foo/bar2 HTTP/1.0!!

Стартовая строка запроса

•  GET  <URI>  (для  HTTP  /  0.9)  •  <метод>  <URI>  HTTP/<версия>  (для  HTTP  /  1.0-­‐1.1)  

Page 42: 2013 09 14 http-протокол

42

HTTP/1.0 200 OK!

Стартовая строка ответа

•  HTTP/<версия>  <код  состояния>  <пояснение>  

Page 43: 2013 09 14 http-протокол

43

Методы

• GET • POST • OPTIONS, HEAD, PUT, PATCH, TRACE, LINK,

UNLINK, CONNECT

clck.ru/26B9h clck.ru/26B9j

Page 44: 2013 09 14 http-протокол

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!

</Тело сообщения>!!

Page 45: 2013 09 14 http-протокол

45

Коды состояния HTTP

Page 46: 2013 09 14 http-протокол

46

Коды состояния HTTP

•  (1xx) Информационные ответ •  (2xx) Ответы успеха •  (3xx) Ответы перенаправления •  (4xx) Ошибки клиента •  (5xx) Ошибки сервера

clck.ru/28Tlv

Page 47: 2013 09 14 http-протокол

47

Ответы успеха (2xx)

Page 48: 2013 09 14 http-протокол

48

Ответы перенаправления (3xx)

Page 49: 2013 09 14 http-протокол

49

Ответы перенаправления (3xx)

Page 50: 2013 09 14 http-протокол

50

Ошибки клиента (4xx)

Page 51: 2013 09 14 http-протокол

51

Ошибки сервера (5xx)

Page 52: 2013 09 14 http-протокол

52

Заголовки HTTP

Page 53: 2013 09 14 http-протокол

53

Заголовки HTTP

• General Headers • Request Headers • Response Headers • Entity Headers

clck.ru/26Kxu

Page 54: 2013 09 14 http-протокол

54

Пример заголовков

Page 55: 2013 09 14 http-протокол

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!

Пример заголовков

Page 56: 2013 09 14 http-протокол

56

X-Frame-Options

X-Frame-Options: DENY;!// запретит загрузку через <iframe>!!!!

Нестандартные заголовки

Page 57: 2013 09 14 http-протокол

57

X-Frame-Options

X-Frame-Options: DENY;!// запретит загрузку через <iframe>!!!X-Frame-Options: SAMEORIGIN; !// разрешит загрузку через <iframe>, но только если и <iframe>, и страница, его загружающая, находятся на одном домене!

Нестандартные заголовки

Page 58: 2013 09 14 http-протокол

58

X-Requested-With

X-Requested-With: XMLHttpRequest!// используется для идентификации ajax запросов

Нестандартные заголовки

Page 59: 2013 09 14 http-протокол

59

// используются чтобы пошутить =)!X-Awesome: If you found this header please email us about a writing job!!!X-Konkurentam: Preved!!X-ServerNickName: Wolverine!

Нестандартные заголовки

clck.ru/27QeD

Page 60: 2013 09 14 http-протокол

60

Кодирование содержимого

• Accept-Encoding: <compress | gzip | deflate | identity>

• Content-Encoding

clck.ru/28Tm5

Page 61: 2013 09 14 http-протокол

61

Кодирование передачи

• Transfer-Encoding: <chunked | compress | deflate | gzip | identity>

clck.ru/28Tm1

Page 62: 2013 09 14 http-протокол

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!

Кодирование передачи

Page 63: 2013 09 14 http-протокол

63

Постоянное соединение

• Connection: Keep-Alive | close

clck.ru/8pRkR

Page 64: 2013 09 14 http-протокол

64

Кэширование

Page 65: 2013 09 14 http-протокол

65

Кеширование

• Срок годности • Ревалидация

Page 66: 2013 09 14 http-протокол

66

Кэширование (срок годности)

GET

Page 67: 2013 09 14 http-протокол

67

Кэширование (срок годности)

GET

200 OK Cach-Control / Expires

Page 68: 2013 09 14 http-протокол

68

Кэширование (срок годности)

Page 69: 2013 09 14 http-протокол

69

Кэширование (ревалидация)

GET

Page 70: 2013 09 14 http-протокол

70

Кэширование (ревалидация)

GET

200 OK Last-Modified / ETag

Page 71: 2013 09 14 http-протокол

71

Кэширование (ревалидация)

GET If-Modified-Since / If-None-Match

Page 72: 2013 09 14 http-протокол

72

Кэширование (ревалидация)

GET If-Modified-Since / If-None-Match

304 Not Modified Last-Modified / ETag

Page 73: 2013 09 14 http-протокол

73

Кэширование (ревалидация)

GET If-Modified-Since / If-None-Match

304 Not Modified Last-Modified / ETag

Page 74: 2013 09 14 http-протокол

74

Cookie

Page 75: 2013 09 14 http-протокол

75

Cookie

• Аутентификация пользователя • Хранение информации о пользователе • Отслеживание переходов пользователя • Ведение статистики

Page 76: 2013 09 14 http-протокол

76

Cookie

GET

Page 77: 2013 09 14 http-протокол

77

Cookie

GET

200 OK Set-Cookie: name=value

Page 78: 2013 09 14 http-протокол

78

Cookie

GET/POST Cookie: name=value

Page 79: 2013 09 14 http-протокол

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

Page 80: 2013 09 14 http-протокол

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

Page 81: 2013 09 14 http-протокол

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

Page 82: 2013 09 14 http-протокол

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

Page 83: 2013 09 14 http-протокол

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

Page 84: 2013 09 14 http-протокол

84

!Set-Cookie: <name>=<value>[; expires=<date>]![; domain=<domain_name>][; path=<some_path>]![; secure][; HttpOnly]!

Атрибуты cookie, безопасность

clck.ru/28TQT

Page 85: 2013 09 14 http-протокол

85

Удаление cookie

• В конце сессии, если сookie не являются постоянными

• Дата истечения была указана и срок хранения вышел

• Браузер удалил сookie по запросу пользователя

Page 86: 2013 09 14 http-протокол

86

Cookieless domain

Cookie ~ 4KB clck.ru/28TQN

Page 87: 2013 09 14 http-протокол

87

HTTP Comet

clck.ru/27xOR

Page 88: 2013 09 14 http-протокол

88

HTTP Comet

clck.ru/27xOR

Page 89: 2013 09 14 http-протокол

89

HTTP Comet способы реализации

• Частый опрос (polling) • Длинный опрос (long-poll) • WebSocket

Page 90: 2013 09 14 http-протокол

90

HTTPS

• Расширение HTTP • HTTP работающий через SSL и TLS • Используются сертификаты • Не кешируется

clck.ru/28TQX

Page 91: 2013 09 14 http-протокол

91

HTTPS

• Расширение HTTP • HTTP работающий через SSL и TLS • Используются сертификаты • Не кешируется (миф clck.ru/28TQh)

clck.ru/28TQX

Page 92: 2013 09 14 http-протокол

92

SPDY HTML 2.0

Page 93: 2013 09 14 http-протокол

93

SPDY

clck.ru/8p4P2

Page 94: 2013 09 14 http-протокол

94

SPDY

• Сжатие HTTP заголовков • Бинарный протокол • Мультиплексирование • Система приоритетов • Полнодуплексный режим • Не нужно всё переписывать

clck.ru/8p4P2

Page 95: 2013 09 14 http-протокол

95

HTTP 2.0

• Разработка с 2012 г. по 2014 г. • Основан на SPDY

Page 96: 2013 09 14 http-протокол

96

Инструменты

Page 97: 2013 09 14 http-протокол

97

Инструменты

•  tcpdump • Wireshark • Fiddler • Браузерные инструменты (HttpFox, FireBug,

Chrome DevTools, Opera Dragonfly)

Page 98: 2013 09 14 http-протокол

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

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

[email protected]

Спасибо!