Http logo


HPACK

기존 http에서는 content-encoding header를 통하여 http 통신에서 주고 받는 contents를 gzip혹은 deflate 압축을 통하여 압축할 수 있었다. 하지만 웹의 발전과 함께 cookie나 user-agent같은 헤더들의 값이 굉장히 커짐에 따라 비효율적인 통신이 지속되게 되었다.

이러한 문제점을 보강하기 위하여 http2에서는 헤더의 압축과 indexing을 지원하고 있고 이 기술을 hpack이라 부르고 이를 RFC7541에 기술해두었다.

Literal

Integer

 0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| ? | ? | ? |       Value       |
+---+---+---+-------------------+

정수형 숫자는 특수한 상황에서만 사용하게 되는데 앞에 prefix들이 들어가고 Value 영역에 실제 정수형 숫자의 data가 포함되게 된다. 만약 밑에 있는 String literal구조에서 String Length가 Integer Literal인데 H는 prefix에 해당하는 영역이고 길이를 Value영역에 표시하게 되는것이다.

하지만 이런식의 구조는 짧은 길이밖에 표현을 못하게 때문에 큰 Integer를 표시하기 위해서 아래와 같은 구조를 지원한다.

 0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| ? | ? | ? | 1   1   1   1   1 |
+---+---+---+-------------------+
| 1 |    Value-(2^N-1) LSB      |
+---+---------------------------+
              ...
+---+---------------------------+
| 0 |    Value-(2^N-1) MSB      |
+---+---------------------------+

String

 0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| H |    String Length (7+)     |
+---+---------------------------+
|  String Data (Length octets)  |
+-------------------------------+

모든 문자열은 위와같이 7개의 비트로 길이를 표현하여 String data에는 실제 문자열의 ascii코드가 들어가게 된다. 여기서 H위치의 bit가 1이면 아래의 String Data는 huffman coding되어 있는 값이고 0인 경우는 plain상태이다.

Indexed Header Field Representation

 0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 1 |        Index (7+)         |
+---+---------------------------+

이미 Indexing되어 있는 헤더의 경우에는 아래와 같이 나타낸다. 0번째 비트를 1로 설정하고 Index를 붙히는 방식으로 값을 표현하는 Integer Literal이다. 각 index에 해당하는 값을 나타내는 table은 밑에 설명에서 나온다.

Literal Header Field with Incremental Indexing

 0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 0 | 1 |      Index (6+)       |
+---+---+-----------------------+
| H |     Value Length (7+)     |
+---+---------------------------+
| Value String (Length octets)  |
+-------------------------------+

Header에서 이름은 index된 값을 사용할 예정이지만 그에 반해서 새로운 값을 포함하여 table에 새롭게 indexing을 하고 싶은 경우에는 0번째 비트에 0 1번째 비트에 1을 설정하고 Index영역에 해당 헤더 이름의 index를 integer literal 형식으로 포함시킨다.

하지만 Header의 이름 또한 새롭게 재정의 하여 인덱싱하고 싶은 경우에는

 0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 0 | 1 |           0           |
+---+---+-----------------------+
| H |     Name Length (7+)      |
+---+---------------------------+
|  Name String (Length octets)  |
+---+---------------------------+
| H |     Value Length (7+)     |
+---+---------------------------+
| Value String (Length octets)  |
+-------------------------------+

이와 같은 형식을 이용한다.

Literal Header Field without Indexing

인덱싱을 하지 않고 헤더 값들을 전송하고 싶은 경우에는 아래와 같은 포멧을 사용한다.

 0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 0 |  Index (4+)   |
+---+---+-----------------------+
| H |     Value Length (7+)     |
+---+---------------------------+
| Value String (Length octets)  |
+-------------------------------+

이미 Index된 header의 이름인 경우에 위와 같이 사용하는 것이고 만약 이미 Index된 헤더의 이름이 아니라면,

 0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 0 |       0       |
+---+---+-----------------------+
| H |     Name Length (7+)      |
+---+---------------------------+
|  Name String (Length octets)  |
+---+---------------------------+
| H |     Value Length (7+)     |
+---+---------------------------+
| Value String (Length octets)  |
+-------------------------------+

위와같은 형식으로 값을 전송하여 헤더를 indexing하지 않음을 나타낸다.

Literal Header Field Never Indexed

 0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 1 |  Index (4+)   |
+---+---+-----------------------+
| H |     Value Length (7+)     |
+---+---------------------------+
| Value String (Length octets)  |
+-------------------------------+

 0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 1 |       0       |
+---+---+-----------------------+
| H |     Name Length (7+)      |
+---+---------------------------+
|  Name String (Length octets)  |
+---+---------------------------+
| H |     Value Length (7+)     |
+---+---------------------------+
| Value String (Length octets)  |
+-------------------------------+

기능에 대해서는 Literal Header Field without Indexing과는 큰 차이가 없지만 앞으로도 이 값은 indexing하지 말라는 의미이다.

Static table

HPACK에는 기본적으로 indexing된 header들이 있다. 여기에 통신중 indexing된 헤더들은 static table의 번호 밑으로 할당된다.

Index Header Name Header Value
1 :authority  
2 :method GET
3 :method POST
4 :path /
5 :path /index.html
6 :scheme http
7 :scheme https
8 :status 200
9 :status 204
10 :status 206
11 :status 304
12 :status 400
13 :status 404
14 :status 500
15 accept-charset  
16 accept-encoding gzip, deflate
17 accept-language  
18 accept-ranges  
19 accept  
20 access-control-allow-origin  
21 age  
22 allow  
23 authorization  
24 cache-control  
25 content-disposition  
26 content-encoding  
27 content-language  
28 content-length  
29 content-location  
30 content-range  
31 content-type  
32 cookie  
33 date  
34 etag  
35 expect  
36 expires  
37 from  
38 host  
39 if-match  
40 if-modified-since  
41 if-none-match  
42 if-range  
43 if-unmodified-since  
44 last-modified  
45 link  
46 location  
47 max-forwards  
48 proxy-authenticate  
49 proxy-authorization  
50 range  
51 referer  
52 refresh  
53 retry-after  
54 server  
55 set-cookie  
56 strict-transport-security  
57 transfer-encoding  
58 user-agent  
59 vary  
60 via  
61 www-authenticate  

Huffman coding tree

                                                        code
                          code as bits                 as hex   len
        sym              aligned to MSB                aligned   in
                                                       to LSB   bits
       (  0)  |11111111|11000                             1ff8  [13]
       (  1)  |11111111|11111111|1011000                7fffd8  [23]
       (  2)  |11111111|11111111|11111110|0010         fffffe2  [28]
       (  3)  |11111111|11111111|11111110|0011         fffffe3  [28]
       (  4)  |11111111|11111111|11111110|0100         fffffe4  [28]
       (  5)  |11111111|11111111|11111110|0101         fffffe5  [28]
       (  6)  |11111111|11111111|11111110|0110         fffffe6  [28]
       (  7)  |11111111|11111111|11111110|0111         fffffe7  [28]
       (  8)  |11111111|11111111|11111110|1000         fffffe8  [28]
       (  9)  |11111111|11111111|11101010               ffffea  [24]
       ( 10)  |11111111|11111111|11111111|111100      3ffffffc  [30]
       ( 11)  |11111111|11111111|11111110|1001         fffffe9  [28]
       ( 12)  |11111111|11111111|11111110|1010         fffffea  [28]
       ( 13)  |11111111|11111111|11111111|111101      3ffffffd  [30]
       ( 14)  |11111111|11111111|11111110|1011         fffffeb  [28]
       ( 15)  |11111111|11111111|11111110|1100         fffffec  [28]
       ( 16)  |11111111|11111111|11111110|1101         fffffed  [28]
       ( 17)  |11111111|11111111|11111110|1110         fffffee  [28]
       ( 18)  |11111111|11111111|11111110|1111         fffffef  [28]
       ( 19)  |11111111|11111111|11111111|0000         ffffff0  [28]
       ( 20)  |11111111|11111111|11111111|0001         ffffff1  [28]
       ( 21)  |11111111|11111111|11111111|0010         ffffff2  [28]
       ( 22)  |11111111|11111111|11111111|111110      3ffffffe  [30]
       ( 23)  |11111111|11111111|11111111|0011         ffffff3  [28]
       ( 24)  |11111111|11111111|11111111|0100         ffffff4  [28]
       ( 25)  |11111111|11111111|11111111|0101         ffffff5  [28]
       ( 26)  |11111111|11111111|11111111|0110         ffffff6  [28]
       ( 27)  |11111111|11111111|11111111|0111         ffffff7  [28]
       ( 28)  |11111111|11111111|11111111|1000         ffffff8  [28]
       ( 29)  |11111111|11111111|11111111|1001         ffffff9  [28]
       ( 30)  |11111111|11111111|11111111|1010         ffffffa  [28]
       ( 31)  |11111111|11111111|11111111|1011         ffffffb  [28]
   ' ' ( 32)  |010100                                       14  [ 6]
   '!' ( 33)  |11111110|00                                 3f8  [10]
   '"' ( 34)  |11111110|01                                 3f9  [10]
   '#' ( 35)  |11111111|1010                               ffa  [12]
   '$' ( 36)  |11111111|11001                             1ff9  [13]
   '%' ( 37)  |010101                                       15  [ 6]
   '&' ( 38)  |11111000                                     f8  [ 8]
   ''' ( 39)  |11111111|010                                7fa  [11]
   '(' ( 40)  |11111110|10                                 3fa  [10]
   ')' ( 41)  |11111110|11                                 3fb  [10]
   '*' ( 42)  |11111001                                     f9  [ 8]
   '+' ( 43)  |11111111|011                                7fb  [11]
   ',' ( 44)  |11111010                                     fa  [ 8]
   '-' ( 45)  |010110                                       16  [ 6]
   '.' ( 46)  |010111                                       17  [ 6]
   '/' ( 47)  |011000                                       18  [ 6]
   '0' ( 48)  |00000                                         0  [ 5]
   '1' ( 49)  |00001                                         1  [ 5]
   '2' ( 50)  |00010                                         2  [ 5]
   '3' ( 51)  |011001                                       19  [ 6]
   '4' ( 52)  |011010                                       1a  [ 6]
   '5' ( 53)  |011011                                       1b  [ 6]
   '6' ( 54)  |011100                                       1c  [ 6]
   '7' ( 55)  |011101                                       1d  [ 6]
   '8' ( 56)  |011110                                       1e  [ 6]
   '9' ( 57)  |011111                                       1f  [ 6]
   ':' ( 58)  |1011100                                      5c  [ 7]
   ';' ( 59)  |11111011                                     fb  [ 8]
   '<' ( 60)  |11111111|1111100                           7ffc  [15]
   '=' ( 61)  |100000                                       20  [ 6]
   '>' ( 62)  |11111111|1011                               ffb  [12]
   '?' ( 63)  |11111111|00                                 3fc  [10]
   '@' ( 64)  |11111111|11010                             1ffa  [13]
   'A' ( 65)  |100001                                       21  [ 6]
   'B' ( 66)  |1011101                                      5d  [ 7]
   'C' ( 67)  |1011110                                      5e  [ 7]
   'D' ( 68)  |1011111                                      5f  [ 7]
   'E' ( 69)  |1100000                                      60  [ 7]
   'F' ( 70)  |1100001                                      61  [ 7]
   'G' ( 71)  |1100010                                      62  [ 7]
   'H' ( 72)  |1100011                                      63  [ 7]
   'I' ( 73)  |1100100                                      64  [ 7]
   'J' ( 74)  |1100101                                      65  [ 7]
   'K' ( 75)  |1100110                                      66  [ 7]
   'L' ( 76)  |1100111                                      67  [ 7]
   'M' ( 77)  |1101000                                      68  [ 7]
   'N' ( 78)  |1101001                                      69  [ 7]
   'O' ( 79)  |1101010                                      6a  [ 7]
   'P' ( 80)  |1101011                                      6b  [ 7]
   'Q' ( 81)  |1101100                                      6c  [ 7]
   'R' ( 82)  |1101101                                      6d  [ 7]
   'S' ( 83)  |1101110                                      6e  [ 7]
   'T' ( 84)  |1101111                                      6f  [ 7]
   'U' ( 85)  |1110000                                      70  [ 7]
   'V' ( 86)  |1110001                                      71  [ 7]
   'W' ( 87)  |1110010                                      72  [ 7]
   'X' ( 88)  |11111100                                     fc  [ 8]
   'Y' ( 89)  |1110011                                      73  [ 7]
   'Z' ( 90)  |11111101                                     fd  [ 8]
   '[' ( 91)  |11111111|11011                             1ffb  [13]
   '\' ( 92)  |11111111|11111110|000                     7fff0  [19]
   ']' ( 93)  |11111111|11100                             1ffc  [13]
   '^' ( 94)  |11111111|111100                            3ffc  [14]
   '_' ( 95)  |100010                                       22  [ 6]
   '`' ( 96)  |11111111|1111101                           7ffd  [15]
   'a' ( 97)  |00011                                         3  [ 5]
   'b' ( 98)  |100011                                       23  [ 6]
   'c' ( 99)  |00100                                         4  [ 5]
   'd' (100)  |100100                                       24  [ 6]
   'e' (101)  |00101                                         5  [ 5]
   'f' (102)  |100101                                       25  [ 6]
   'g' (103)  |100110                                       26  [ 6]
   'h' (104)  |100111                                       27  [ 6]
   'i' (105)  |00110                                         6  [ 5]
   'j' (106)  |1110100                                      74  [ 7]
   'k' (107)  |1110101                                      75  [ 7]
   'l' (108)  |101000                                       28  [ 6]
   'm' (109)  |101001                                       29  [ 6]
   'n' (110)  |101010                                       2a  [ 6]
   'o' (111)  |00111                                         7  [ 5]
   'p' (112)  |101011                                       2b  [ 6]
   'q' (113)  |1110110                                      76  [ 7]
   'r' (114)  |101100                                       2c  [ 6]
   's' (115)  |01000                                         8  [ 5]
   't' (116)  |01001                                         9  [ 5]
   'u' (117)  |101101                                       2d  [ 6]
   'v' (118)  |1110111                                      77  [ 7]
   'w' (119)  |1111000                                      78  [ 7]
   'x' (120)  |1111001                                      79  [ 7]
   'y' (121)  |1111010                                      7a  [ 7]
   'z' (122)  |1111011                                      7b  [ 7]
   '{' (123)  |11111111|1111110                           7ffe  [15]
   '|' (124)  |11111111|100                                7fc  [11]
   '}' (125)  |11111111|111101                            3ffd  [14]
   '~' (126)  |11111111|11101                             1ffd  [13]
       (127)  |11111111|11111111|11111111|1100         ffffffc  [28]
       (128)  |11111111|11111110|0110                    fffe6  [20]
       (129)  |11111111|11111111|010010                 3fffd2  [22]
       (130)  |11111111|11111110|0111                    fffe7  [20]
       (131)  |11111111|11111110|1000                    fffe8  [20]
       (132)  |11111111|11111111|010011                 3fffd3  [22]
       (133)  |11111111|11111111|010100                 3fffd4  [22]
       (134)  |11111111|11111111|010101                 3fffd5  [22]
       (135)  |11111111|11111111|1011001                7fffd9  [23]
       (136)  |11111111|11111111|010110                 3fffd6  [22]
       (137)  |11111111|11111111|1011010                7fffda  [23]
       (138)  |11111111|11111111|1011011                7fffdb  [23]
       (139)  |11111111|11111111|1011100                7fffdc  [23]
       (140)  |11111111|11111111|1011101                7fffdd  [23]
       (141)  |11111111|11111111|1011110                7fffde  [23]
       (142)  |11111111|11111111|11101011               ffffeb  [24]
       (143)  |11111111|11111111|1011111                7fffdf  [23]
       (144)  |11111111|11111111|11101100               ffffec  [24]
       (145)  |11111111|11111111|11101101               ffffed  [24]
       (146)  |11111111|11111111|010111                 3fffd7  [22]
       (147)  |11111111|11111111|1100000                7fffe0  [23]
       (148)  |11111111|11111111|11101110               ffffee  [24]
       (149)  |11111111|11111111|1100001                7fffe1  [23]
       (150)  |11111111|11111111|1100010                7fffe2  [23]
       (151)  |11111111|11111111|1100011                7fffe3  [23]
       (152)  |11111111|11111111|1100100                7fffe4  [23]
       (153)  |11111111|11111110|11100                  1fffdc  [21]
       (154)  |11111111|11111111|011000                 3fffd8  [22]
       (155)  |11111111|11111111|1100101                7fffe5  [23]
       (156)  |11111111|11111111|011001                 3fffd9  [22]
       (157)  |11111111|11111111|1100110                7fffe6  [23]
       (158)  |11111111|11111111|1100111                7fffe7  [23]
       (159)  |11111111|11111111|11101111               ffffef  [24]
       (160)  |11111111|11111111|011010                 3fffda  [22]
       (161)  |11111111|11111110|11101                  1fffdd  [21]
       (162)  |11111111|11111110|1001                    fffe9  [20]
       (163)  |11111111|11111111|011011                 3fffdb  [22]
       (164)  |11111111|11111111|011100                 3fffdc  [22]
       (165)  |11111111|11111111|1101000                7fffe8  [23]
       (166)  |11111111|11111111|1101001                7fffe9  [23]
       (167)  |11111111|11111110|11110                  1fffde  [21]
       (168)  |11111111|11111111|1101010                7fffea  [23]
       (169)  |11111111|11111111|011101                 3fffdd  [22]
       (170)  |11111111|11111111|011110                 3fffde  [22]
       (171)  |11111111|11111111|11110000               fffff0  [24]
       (172)  |11111111|11111110|11111                  1fffdf  [21]
       (173)  |11111111|11111111|011111                 3fffdf  [22]
       (174)  |11111111|11111111|1101011                7fffeb  [23]
       (175)  |11111111|11111111|1101100                7fffec  [23]
       (176)  |11111111|11111111|00000                  1fffe0  [21]
       (177)  |11111111|11111111|00001                  1fffe1  [21]
       (178)  |11111111|11111111|100000                 3fffe0  [22]
       (179)  |11111111|11111111|00010                  1fffe2  [21]
       (180)  |11111111|11111111|1101101                7fffed  [23]
       (181)  |11111111|11111111|100001                 3fffe1  [22]
       (182)  |11111111|11111111|1101110                7fffee  [23]
       (183)  |11111111|11111111|1101111                7fffef  [23]
       (184)  |11111111|11111110|1010                    fffea  [20]
       (185)  |11111111|11111111|100010                 3fffe2  [22]
       (186)  |11111111|11111111|100011                 3fffe3  [22]
       (187)  |11111111|11111111|100100                 3fffe4  [22]
       (188)  |11111111|11111111|1110000                7ffff0  [23]
       (189)  |11111111|11111111|100101                 3fffe5  [22]
       (190)  |11111111|11111111|100110                 3fffe6  [22]
       (191)  |11111111|11111111|1110001                7ffff1  [23]
       (192)  |11111111|11111111|11111000|00           3ffffe0  [26]
       (193)  |11111111|11111111|11111000|01           3ffffe1  [26]
       (194)  |11111111|11111110|1011                    fffeb  [20]
       (195)  |11111111|11111110|001                     7fff1  [19]
       (196)  |11111111|11111111|100111                 3fffe7  [22]
       (197)  |11111111|11111111|1110010                7ffff2  [23]
       (198)  |11111111|11111111|101000                 3fffe8  [22]
       (199)  |11111111|11111111|11110110|0            1ffffec  [25]
       (200)  |11111111|11111111|11111000|10           3ffffe2  [26]
       (201)  |11111111|11111111|11111000|11           3ffffe3  [26]
       (202)  |11111111|11111111|11111001|00           3ffffe4  [26]
       (203)  |11111111|11111111|11111011|110          7ffffde  [27]
       (204)  |11111111|11111111|11111011|111          7ffffdf  [27]
       (205)  |11111111|11111111|11111001|01           3ffffe5  [26]
       (206)  |11111111|11111111|11110001               fffff1  [24]
       (207)  |11111111|11111111|11110110|1            1ffffed  [25]
       (208)  |11111111|11111110|010                     7fff2  [19]
       (209)  |11111111|11111111|00011                  1fffe3  [21]
       (210)  |11111111|11111111|11111001|10           3ffffe6  [26]
       (211)  |11111111|11111111|11111100|000          7ffffe0  [27]
       (212)  |11111111|11111111|11111100|001          7ffffe1  [27]
       (213)  |11111111|11111111|11111001|11           3ffffe7  [26]
       (214)  |11111111|11111111|11111100|010          7ffffe2  [27]
       (215)  |11111111|11111111|11110010               fffff2  [24]
       (216)  |11111111|11111111|00100                  1fffe4  [21]
       (217)  |11111111|11111111|00101                  1fffe5  [21]
       (218)  |11111111|11111111|11111010|00           3ffffe8  [26]
       (219)  |11111111|11111111|11111010|01           3ffffe9  [26]
       (220)  |11111111|11111111|11111111|1101         ffffffd  [28]
       (221)  |11111111|11111111|11111100|011          7ffffe3  [27]
       (222)  |11111111|11111111|11111100|100          7ffffe4  [27]
       (223)  |11111111|11111111|11111100|101          7ffffe5  [27]
       (224)  |11111111|11111110|1100                    fffec  [20]
       (225)  |11111111|11111111|11110011               fffff3  [24]
       (226)  |11111111|11111110|1101                    fffed  [20]
       (227)  |11111111|11111111|00110                  1fffe6  [21]
       (228)  |11111111|11111111|101001                 3fffe9  [22]
       (229)  |11111111|11111111|00111                  1fffe7  [21]
       (230)  |11111111|11111111|01000                  1fffe8  [21]
       (231)  |11111111|11111111|1110011                7ffff3  [23]
       (232)  |11111111|11111111|101010                 3fffea  [22]
       (233)  |11111111|11111111|101011                 3fffeb  [22]
       (234)  |11111111|11111111|11110111|0            1ffffee  [25]
       (235)  |11111111|11111111|11110111|1            1ffffef  [25]
       (236)  |11111111|11111111|11110100               fffff4  [24]
       (237)  |11111111|11111111|11110101               fffff5  [24]
       (238)  |11111111|11111111|11111010|10           3ffffea  [26]
       (239)  |11111111|11111111|1110100                7ffff4  [23]
       (240)  |11111111|11111111|11111010|11           3ffffeb  [26]
       (241)  |11111111|11111111|11111100|110          7ffffe6  [27]
       (242)  |11111111|11111111|11111011|00           3ffffec  [26]
       (243)  |11111111|11111111|11111011|01           3ffffed  [26]
       (244)  |11111111|11111111|11111100|111          7ffffe7  [27]
       (245)  |11111111|11111111|11111101|000          7ffffe8  [27]
       (246)  |11111111|11111111|11111101|001          7ffffe9  [27]
       (247)  |11111111|11111111|11111101|010          7ffffea  [27]
       (248)  |11111111|11111111|11111101|011          7ffffeb  [27]
       (249)  |11111111|11111111|11111111|1110         ffffffe  [28]
       (250)  |11111111|11111111|11111101|100          7ffffec  [27]
       (251)  |11111111|11111111|11111101|101          7ffffed  [27]
       (252)  |11111111|11111111|11111101|110          7ffffee  [27]
       (253)  |11111111|11111111|11111101|111          7ffffef  [27]
       (254)  |11111111|11111111|11111110|000          7fffff0  [27]
       (255)  |11111111|11111111|11111011|10           3ffffee  [26]
   EOS (256)  |11111111|11111111|11111111|111111      3fffffff  [30]

Practice

크롬으로 부터 실제 / path로 GET을 전송했을때 얻는 HEADERS frame에 header data fragment를 갖고 실제 위와 같은 방식으로 분석을 해보았다. (크롬에서는 favicon을 /favicon.ico에서 찾기 때문에 index에 대한 예제도 볼 수 있었다.)

다음은 GET /에 대한 요청 헤더이다.

41 8A A0 E4 1D 13 9D 09 B8 F0 00 0F 82 84 87 53 B8 49 7C A5 89 D3 4D 1F 43 AE BA 0C 41 A4 C7 A9 8F 33 A6 9A 3F DF 9A 68 FA 1D 75 D0 62 0D 26 3D 4C 79 A6 8F BE D0 01 77 FE 8D 48 E6 2B 1E 0B 1D 7F 5F 2C 7C FD F6 80 0B BD 50 8E 9B D9 AB FA 52 42 CB 40 D2 5F A5 11 21 27 51 A4 EA 75 B3 6D FA EA 7F BE D0 01 77 BE 8B 52 DC 37 7D F6 80 0B B9 F4 5A BE FB 40 05 DA FA E8 3F BE D0 01 71 7F 60 97 8A 61 C1 8A 10 AE 15 C2 E0 9C 64 2C 89 E6 D7 0B 4C BC 27 1E 79 B6 FF 40 92 B6 B9 AC 1C 85 58 D5 20 A4 B6 C2 AD 61 7B 5A 54 25 1F 01 31 7A DC D0 7F 66 A2 81 B0 DA E0 53 FA D0 32 1A A4 9D 13 FD A9 92 A4 96 85 34 0C 8A 6A DC A7 E2 81 04 41 04 4D 7F 6A 43 5D 74 17 91 63 CC 64 B0 DB 2E AE CB 8A 7F 59 B1 EF D1 9F E9 4A 0D D4 AA 62 29 3A 9F FB 52 F4 F6 1E 92 B0 D3 4B 81 71 34 06 57 08 9B 53 70 E5 1D 86 61 B6 5D 5D 97 3F

이를 한줄한줄 분석해보면

bin semantic
\x41 Literal indexed idx=1 :authority
\x8a length 10 / with huffman
\xa0\xe4\x1d\x13\x9d\x09\xb8\xf0\x00\x0f localhost:8000
\x82 :method GET
\x84 :path /
\x87 :scheme https
\x53 Literal indexed accept
\xb8 len 56 / with huffman
\x49\x7c…xf6\x80\x0b\xbd text/html,application/xhtml+xml,appl…
\x50 Literal indexed accept-encoding
\x8e len 14 / with huffman
\x9b\xd9…\x21\x27 gzip, deflate, sdch
\x51 Literal indexed accept-language
\xa4 len 36 / with huffman
\xea\x75…\x01\x71\x7f ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4,ja;q=0.2
\x60 Literal indexed idx=32 cookie
\x97 len 23 / with huffman
\x8a\x61…\x79\xb6\xff _ga=GA1.1.1626313285.1438268855
\x40 Literal indexed
\x92 len 18 / with huffman
\xb6\xb9…\x25\x1f upgrade-insecure-requests
\x01 len 1 / without huffman
\x31 ‘1’
\x7a Literal indexed idx=58 user-agent
\xdc len 92 / with huffman
\xd0\x7f\x66\xa2…xb6\x5d\x5d\x97\x3f Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWe…

위와 같은 요청을 한번 처리하고 나면 connection 사이에는 다음과 같은 테이블이 하나 생기게 된다.

Dynamic table

index key/value
62 user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36
63 upgrade-insecure-requests: 1
64 cookie: _ga=GA1.1.1626313285.1438268855
65 accept-language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4,ja;q=0.2
66 accept-encoding: gzip, deflate, sdch
67 accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
68 :authority: localhost:8000

그리고 크롬에서 자동적으로 그 뒤에 요청한 다음은 GET /favicon.ico에 대한 요청 헤더이다.

C4 82 00 84 B9 58 D3 3F 89 62 51 F7 31 0F 52 E6 21 FF 87 53 03 2A 2F 2A C3 C2 C1 73 90 9D 29 AD 17 18 62 83 90 74 4E 74 26 E3 C0 00 18 C0

이를 다시 분석해보면 위에서 사용했던 Dynamic table을 활용하여 요청했음을 알 수 있다.

bin semantic
\xc4 Indexed - idx=68 :authority: localhost:8000
\x82 idx=2 :method GET
\x00 Literal without index
\x84 len 4 / with huffman
\xb9\x58\xd3\x3f :path
\x89 len 9 / with huffman
\x62\x51\xf7\x31\x0f\x52\xe6\x21\xff /favicon.ico
\x87 Indexed - idx=7 :scheme https
\x53 Literal Indexed idx=19 accept
\x03 len 3 / without huffman
\x2a\x2f\x2a */*

여기서 dynamic table에 accept가 추가됩니다.

index key/value
62 accept: */*
63 user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36
64 upgrade-insecure-requests: 1
65 cookie: _ga=GA1.1.1626313285.1438268855
66 accept-language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4,ja;q=0.2
67 accept-encoding: gzip, deflate, sdch
68 accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
69 :authority: localhost:8000
bin semantic
\xc3 Indexed - idx=67 accept-encoding: gzip, deflate, sdch
\xc2 Indexed - idx=66 accept-language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4,ja;q=0.2
\xc1 Indexed - idx=65 cookie: _ga=GA1.1.1626313285.1438268855
\x73 Literal Indexed idx=51 referer
\x90 len 16 / with huffman
\x9d\x29\xad…\x00\x18 https://localhost:8000/

여기서 dynamic table에 referer가 추가됩니다.

index key/value
62 referer: https://localhost:8000/
63 accept: */*
64 user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36
65 upgrade-insecure-requests: 1
66 cookie: _ga=GA1.1.1626313285.1438268855
67 accept-language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4,ja;q=0.2
68 accept-encoding: gzip, deflate, sdch
69 accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
70 :authority: localhost:8000
bin semantic
\xc0 Indexed - Add idx=64 (user-agent: Mozilla/5.0…)