Что надо знать о http/2

50
HTTP/2 Что нужно знать фронтендеру Moscow JS Conf 1

Upload: badoo-development

Post on 16-Apr-2017

6.458 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Что надо знать о HTTP/2

HTTP/2Что нужно знать фронтендеру

Moscow JS Conf

1

Page 2: Что надо знать о HTTP/2

Александр Майоров

§ twitter, github: @frontdevops§ [email protected]

Developer advocate & technical evangelist inTutu.ru

2

Page 3: Что надо знать о HTTP/2

267сотрудников

600 тыс.посетителей в день

2003 г.год основания

Мы продаем туры, ж/д и авиабилеты, билеты на автобусы, бронируем отели, рассказываем о расписании.

11 млнпосетителей в месяц

Самый посещаемый сервис туристических услуг в России(по результатам исследования comScore).

3

Page 4: Что надо знать о HTTP/2

HTTP/2

4

Page 5: Что надо знать о HTTP/2

Факты про HTTP/2

§ Основан на базе Google SPDY

§ Стандартизован в мае 2015 (RFC 7540, 7541)

§ Может работать поверх TCP (h2c), но браузеры умеют только поверх TLS (h2 with ALPN)

§ Больше не будет минорных версий

5

Page 6: Что надо знать о HTTP/2

TLS или SSL ?

TLS - transport layer security, основан на протоколе SSL (Secure Sockets Layer).

На данный момент последняя версия –TLS 1.2, выпущена в августе 2008 года.

Простым языком: TLS это другая версия SSL и он лучше :)

6

Page 7: Что надо знать о HTTP/2

Ключевые особенности HTTP/2

§ ТранспортнаянадстройканадHTTP/1.x§ Сжатиезаголовков§ Бинарныйформат§ Мультиплексирование§ Приоритезация

7

Page 8: Что надо знать о HTTP/2

Надстройка над HTTP/1.x

8

Page 9: Что надо знать о HTTP/2

Бинарный формат

HTTP/2

9

Page 10: Что надо знать о HTTP/2

Мультиплексирование

10

Page 11: Что надо знать о HTTP/2

Мультиплексирование

11

Page 12: Что надо знать о HTTP/2

Приоритезация

12

Page 13: Что надо знать о HTTP/2

SUPPORTЧтосподдержкой?

13

Page 14: Что надо знать о HTTP/2

Поддержка браузерами

14

Page 15: Что надо знать о HTTP/2

Поддержка на бекенде

§ Nginx(1.9.5+)§ Apache(2.4.17+)withmod_http2

§ Nodejs withhttp2module§ Nghttpx§ H2O

15

Page 16: Что надо знать о HTTP/2

СЕРТИФИКАТЫHTTPS://

16

Page 17: Что надо знать о HTTP/2

Где брать сертификаты ?

§ Купить...§ Получитьбесплатноу

§ Let's encrypt§ StartSSL

§ Создатьсамомуиподписать(self-signed)

17

Page 18: Что надо знать о HTTP/2

Self-signed сертификаты

Ø Работает,но Chrome запускать с флагом:chrome--ignore-certificate-errors

18

Page 19: Что надо знать о HTTP/2

SERVER HINTSRESOURCE HINTSSERVER

19

Page 20: Что надо знать о HTTP/2

Что это?

<link rel="dns-prefetch" href="//example.com"><link rel="preconnect" href="//example.com"><link rel="prefetch" href="/next-page.html" as="html"><link rel="prefetch" href="/library.js" as="script"><link rel="prefetch" href="/theme.css" as="style"><link rel="subresource" href="/page.css">

20

Page 21: Что надо знать о HTTP/2

Resource hints

21

<link rel="dns-prefetch" href="//example.com"><link rel="preconnect" href="//example.com"><link rel="prefetch" href="/next-page.html" as="html"><link rel="prefetch" href="/library.js" as="script"><link rel="prefetch" href="/theme.css" as="style"><link rel="subresource" href="/page.css">

Page 22: Что надо знать о HTTP/2

Server hints

GETHTTP/1.1…Link:<https://example.com>;rel=dns-prefetchLink:<https://example.com>;rel=preconnectLink:<https://example.com/next-page.html>;rel=prerender;Link:<https://example.com/logo.jpg>;rel=prefetch;as=image;…

22

Page 23: Что надо знать о HTTP/2

Preload

23

Page 24: Что надо знать о HTTP/2

Preload

<link rel="preload" href="/next-page.html" as="html"><link rel="preload" href="/library.js" as="script"><link rel="preload" href="/theme.css" as="style"><link rel="preload" href="/page.css” as="style">

24

Page 25: Что надо знать о HTTP/2

Preload

GETHTTP/1.1…Link:</next-page.html>;rel=preload;as=html;Link:</logo.jpg>;rel=preload;as=image;Link:</app/script.js>;rel=preload;as=script;Link:</app/style.css>;rel=preload;as=style;…

25

Page 26: Что надо знать о HTTP/2

Server push use preload

GETHTTP/1.1…Link:</next-page.html>;rel=preload;as=html;Link:</logo.jpg>;rel=preload;as=image;Link:</app/script.js>;rel=preload;as=script;Link:</app/style.css>;rel=preload;as=style;nopush…

RFC5988

РаботаетвпроксиNghttpx26

Page 27: Что надо знать о HTTP/2

HTTP/2 Server push

27

Page 28: Что надо знать о HTTP/2

HTTP/2 vs HTTP/1

28

Page 29: Что надо знать о HTTP/2

Server Push in Applicationconst fs = require('fs'),

http = require('http2');

var server = http.createServer(options, (request, response)=>{let push = response.push('/push.css`,

{'content-type': 'text/css'});

fs.createReadStream(`style.css`).pipe(push);// илиpush.end(fs.readFileSync(`style.css`));

}

server.listen(…);

29

Page 30: Что надо знать о HTTP/2

HTTP/1.1 Secure

30

Page 31: Что надо знать о HTTP/2

Без Server push

31

Page 32: Что надо знать о HTTP/2

Server push в действии

32

Page 33: Что надо знать о HTTP/2

ОТЛАДКАИнструментыотладкиHTTP/2

33

Page 34: Что надо знать о HTTP/2

Инструменты отладки HTTP/2

• nghttp• curl• openssl• h2c• h2i

34

Page 35: Что надо знать о HTTP/2

Инструменты отладки OpenSSLopenssl s_client -connectsapsan.tutu.ru:443-nextprotoneg ''

CONNECTED(00000003)Protocols advertised by server: h2, http/1.1[...]

35

Page 36: Что надо знать о HTTP/2

Инструменты отладки CURLcurl -vso /dev/null--http2https://sapsan.tutu.ru

[...]* Using HTTP2, server supports multi-use* Connection state changed (HTTP/2 confirmed)* TCP_NODELAY set* Copying HTTP/2 data in stream …[...]

36

Page 37: Что надо знать о HTTP/2

Инструменты отладки h2c

• h2cstart--dump• h2cconnectsapsan.tutu.ru• h2get/• h2diconnect

37

Page 38: Что надо знать о HTTP/2

Вывод информации в h2c

38

Page 39: Что надо знать о HTTP/2

nghttp2

nghttp -nv https://sapsan.tutu.ru

39

Page 40: Что надо знать о HTTP/2

HTTP/2Нуженли?

новыймодныйтролололJ

40

Page 41: Что надо знать о HTTP/2

Трудности перехода на HTTP/2

§ ВысокийпорогвходапосравнениюсHTTP/1.x§ Необходимостьсертификатов§ Затратынашифрование§ ТекущиеоптимизациистановятсяBadpractice§ Невсебраузерыподдерживают§ НевсёсерверноеПОреализоваловесьстандартцеликом§ ServerPush– пуля,котораяможетубитьвашсервис

41

Page 42: Что надо знать о HTTP/2

Нужен ли HTTP/2 ?

НуженHTTPSБизнесответит:

42

Page 43: Что надо знать о HTTP/2

Зачем переходить на HTTPS

§ Новыебраузерные фичи (ServiceWorkers)§ SEO§ Аналитика§ Повышениеконверсии§ Что-тоеще,чтоязабылилисамещенезнаю...

43

Page 44: Что надо знать о HTTP/2

Зачем переходить на HTTPS

§ Новыебраузерные фичи (ServiceWorkers)§ SEO§ Аналитика§ Повышениеконверсии§ Что-тоеще,чтоязабылилисамещенезнаю...

АHTTP/2 нужен?

44

Page 45: Что надо знать о HTTP/2

HTTP/2 нужен

§ Снижаетоверхед отиспользованияшифрования§ Нижезагрузка ЦПУ ирасходпамяти§ Можноиспользовать конвейернуюобработку запросовиответов§ Снижаетвероятностьперегрузкисети(меньше TCP соединений)§ Уменьшает лаги дляпоследующихзапросов(ненужнозановоустанавливатьTCPсоединение).

§ Отпадаетнеобходимостьв доменномшардировании§ Ускорениезагрузкистраниц

45

Page 46: Что надо знать о HTTP/2

Спасибо!Вопросы?

46

Page 47: Что надо знать о HTTP/2

Ссылки по теме и на слайдыhttps://goo.gl/uqdQeC

47

Page 48: Что надо знать о HTTP/2

Александр Майоров

§ twitter, github: @frontdevops§ [email protected]

Developer advocate & technical evangelist inTutu.ru

48

Page 49: Что надо знать о HTTP/2

Секретные слайды

49

Page 50: Что надо знать о HTTP/2

50

HTTP/1.1

VS

HTTP/2