9. 태초의 HTTP
• TCP 커넥션 수립 (3-way handshake)
• HTML 파일 1개 가져옴
• TCP 커넥션 닫음
• TCP 커넥션 수립 (3-way handshake)
• PNG 파일 1개 가져옴
• TCP 커넥션 닫음
20번 반복
14년 10월 21일 화요일
10. 태초의 HTTP
• TCP 커넥션 수립 (3-way handshake)
• HTML 파일 1개 가져옴
• TCP 커넥션 닫음
• TCP 커넥션 수립 (3-way handshake)
• PNG 파일 1개 가져옴
• TCP 커넥션 닫음
42 RTT
20번 반복
14년 10월 21일 화요일
11. HTTP/1.0+ (KEEP-ALIVE)
• TCP 커넥션 수립 (3-way handshake)
• HTML 파일 1개 가져옴
• PNG 파일 1개 가져옴 (20번 반복)
14년 10월 21일 화요일
12. HTTP/1.0+ (KEEP-ALIVE)
• TCP 커넥션 수립 (3-way handshake)
• HTML 파일 1개 가져옴
• PNG 파일 1개 가져옴 (20번 반복)
22 RTT
14년 10월 21일 화요일
13. PARALLEL CONNECTIONS
• TCP 커넥션 수립 (3-way handshake)
• HTML 파일 1개 가져옴
• TCP 커넥션 7개 더 수립 (3-way handshake)
• PNG 파일 8개 가져옴
• PNG 파일 8개 더 가져옴
• PNG 파일 4개 더 가져옴
14년 10월 21일 화요일
14. PARALLEL CONNECTIONS
• TCP 커넥션 수립 (3-way handshake)
• HTML 파일 1개 가져옴
• TCP 커넥션 7개 더 수립 (3-way handshake)
• PNG 파일 8개 가져옴
• PNG 파일 8개 더 가져옴
• PNG 파일 4개 더 가져옴
6 RTT
14년 10월 21일 화요일
15. PIPELINING
• TCP 커넥션 수립 (3-way handshake)
• HTML 파일 1개 가져옴
• PNG 파일 20개 가져옴
14년 10월 21일 화요일
16. PIPELINING
• TCP 커넥션 수립 (3-way handshake)
• HTML 파일 1개 가져옴
• PNG 파일 20개 가져옴
3 RTT
14년 10월 21일 화요일
17. PIPELINING
• TCP 커넥션 수립 (3-way handshake)
• HTML 파일 1개 가져옴
• PNG 파일 20개 가져옴
구현이 어려워서
잘 안씀!
14년 10월 21일 화요일
23. HEADER COMPRESSION
서버가 헤더 “date:Mon, 21 Oct 2013
20:13:21 GMT”를 클라이언트에게 전송
date:Mon, 21 Oct 2013 20:13:21 GMT C S
14년 10월 21일 화요일
24. HEADER COMPRESSION
서버가 헤더 “date:Mon, 21 Oct 2013
20:13:21 GMT”를 클라이언트에게 전송
C S
..date..z...T.D. .....f...-..
헤더값에 Huffman Coding
적용: 34 => 29
14년 10월 21일 화요일
25. HEADER COMPRESSION
서버가 헤더 “date:Mon, 21 Oct 2013
C 20:13:21 GMT”를 클라이언트에게 전송
S ..date..z...T.D. .....f...-..
Index Header Name Header Value
1 :authority
... ... ...
33 date
... ... ...
61 www-authenticate
Static Table
Index Header Name Header Value
Dynamic Table
14년 10월 21일 화요일
26. HEADER COMPRESSION
서버가 헤더 “date:Mon, 21 Oct 2013
C 20:13:21 GMT”를 클라이언트에게 전송
S ....z...T.D. .....f...-..
Index Header Name Header Value
1 :authority
... ... ...
33 date
... ... ...
61 www-authenticate
Static Table
Index Header Name Header Value
Dynamic Table
헤더 이름을 Static Table
인덱스로 대체: 29 => 24
14년 10월 21일 화요일
27. HEADER COMPRESSION
서버가 헤더 “date:Mon, 21 Oct 2013
C 20:13:21 GMT”를 클라이언트에게 전송
S ....z...T.D. .....f...-..
Index Header Name Header Value
1 :authority
... ... ...
33 date
... ... ...
61 www-authenticate
Static Table
Index Header Name Header Value
62 date
Mon, 21 Oct
2013 20:13:21
GMT
Dynamic Table
14년 10월 21일 화요일
28. HEADER COMPRESSION
서버가 헤더 “date:Mon, 21 Oct 2013
C 20:13:21 GMT”를 클라이언트에게 “또” 전송
S
Index Header Name Header Value
1 :authority
... ... ...
33 date
... ... ...
61 www-authenticate
Static Table
Index Header Name Header Value
62 date
Mon, 21 Oct
2013 20:13:21
GMT
Dynamic Table
14년 10월 21일 화요일
29. HEADER COMPRESSION
서버가 헤더 “date:Mon, 21 Oct 2013
C 20:13:21 GMT”를 클라이언트에게 “또” 전송
S
Index Header Name Header Value
1 :authority
... ... ...
33 date
... ... ...
61 www-authenticate
Static Table
Index Header Name Header Value
62 date
Mon, 21 Oct
2013 20:13:21
GMT
Dynamic Table
.
헤더 필드를 Dynamic Table
인덱스로 대체: 24 => 1
14년 10월 21일 화요일
32. MULTIPLEXED STREAMS
• HTTP/1.1
• TCP 커넥션 1개를 열고
• HTML 문서 1개를 요청해서 받음
• TCP 커넥션 7개를 더 열고
• PNG 파일 8개를 요청해서 받음
• PNG 파일 8개를 더 요청해서 받음
• PNG 파일 4개를 더 요청해서 받음
14년 10월 21일 화요일
33. MULTIPLEXED STREAMS
• HTTP/1.1
• TCP 커넥션 1개를 열고
• HTML 문서 1개를 요청해서 받음
• TCP 커넥션 7개를 더 열고
• PNG 파일 8개를 요청해서 받음
• PNG 파일 8개를 더 요청해서 받음
• PNG 파일 4개를 더 요청해서 받음
• HTTP/2
• TCP 커넥션 1개를 열고
• HTML 문서 1개를 요청해서 받음
• PNG 파일 20개를 요청해서 받음
14년 10월 21일 화요일
42. SERVER PUSH
• Server Push 안하면:
• TCP 커넥션 1개를 열고
• HTML 문서 1개를 요청해서 받음
• 그림 파일 2개를 요청해서 받음
14년 10월 21일 화요일
43. SERVER PUSH
• Server Push 안하면:
• TCP 커넥션 1개를 열고
• HTML 문서 1개를 요청해서 받음
• 그림 파일 2개를 요청해서 받음
• Server Push 하면:
• TCP 커넥션 1개를 열고
• HTML 문서 1개를 요청해서 그림
파일 2개와 함께 받음
14년 10월 21일 화요일
44. SERVER PUSH
C 1
S
1 1 1 1 2 1 2 4 1 4 1: PUSH_PROMISE (2: a.png)
1: PUSH_PROMISE (4: b.png)
1: a.html
2: a.png
4: b.png
1: GET /a.html
14년 10월 21일 화요일
45. SERVER PUSH
C 1
S
1 1 1 1 2 1 2 4 1 4 1: PUSH_PROMISE (2: a.png)
1: PUSH_PROMISE (4: b.png)
1: a.html
2: a.png
4: b.png
1: GET /a.html
a.png를 2번 스트림으로 보내줄
것이니 요청하지 말아라
14년 10월 21일 화요일
48. STREAM PRIORITY
• 의존성 지정 안하면:
• TCP 커넥션 1개를 열고
• HTML 문서 1개를 요청해서 받음
• CSS 문서 1개와 그림 파일 2개를
요청해서 받음
• CSS 문서가 늦게 와서 렌더링이
늦어짐
14년 10월 21일 화요일
49. STREAM PRIORITY
• 의존성 지정 안하면:
• TCP 커넥션 1개를 열고
• HTML 문서 1개를 요청해서 받음
• CSS 문서 1개와 그림 파일 2개를
요청해서 받음
• CSS 문서가 늦게 와서 렌더링이
늦어짐
• 의존성 지정하면:
• TCP 커넥션 1개를 열고
• HTML 문서 1개를 요청해서 받음
• CSS 문서 1개와 그림 파일 2개를
요청해서 받음. 그림 파일이 CSS
에 의존성이 있다고 알려줌.
• CSS 문서가 가장 먼저 순조롭게
렌더링
14년 10월 21일 화요일
50. STREAM PRIORITY
C 7 5 3
S
3 3 3 3 7 5 5 7 7 5 3: a.css
5: 1.png
7: 2.png
3: GET /a.css
5: GET /1.png (3에 의존)
7: GET /2.png (3에 의존)
14년 10월 21일 화요일
51. STREAM PRIORITY
C 7 5 3
S
3 3 3 3 7 5 5 7 7 5 3: a.css
5: 1.png
7: 2.png
3: GET /a.css
5: GET /1.png (3에 의존)
7: GET /2.png (3에 의존)
서버가 어떻게 줘야하는지에
대한 규칙은 전혀 없음
14년 10월 21일 화요일
53. HTTP/1에서 변하는 것
• HTTP 메시지 포맷
• HTTP 메시지 전송방법
• Connection 헤더 사라짐
• chunked 인코딩 사용 금지
14년 10월 21일 화요일
54. 변하지 않는 것
• “HTTP's existing semantics remain unchanged.”
• RFC 7231, 7232, 7233, 7234, 7235 그대로 사용함
14년 10월 21일 화요일
55. SPDY와 다른 점
헤더 압축
SPDY
HTTP/2
zlib
HPACK
14년 10월 21일 화요일
56. SPDY와 다른 점
헤더 압축
SPDY
HTTP/2
zlib
HPACK
CRIME
취약점
14년 10월 21일 화요일
57. 브라우저 지원
• IE 11 on Windows 8
• Firefox 34
• Chrome --enable-spdy4
14년 10월 21일 화요일
58. 현재 HTTP/2 진행상황
•Working Group Last Call (마무리 단계)
• 2015년 2월 RFC로 출판될 “예정”
14년 10월 21일 화요일
59. HTTP/2에 기여하려면
• HTTP/2 혹은 HPACK 초안을 읽고,
• ietf-http-wg@w3.org 로 의견을 보냅니다.
• 오타 수정 같은 것은 https://github.com/http2/http2-spec
로 PullRequest를 보내도 좋습니다.
14년 10월 21일 화요일