92 lines
2.4 KiB
Markdown
92 lines
2.4 KiB
Markdown
# hpack-test-case
|
|
|
|
## Spec
|
|
|
|
HPACK: Header Compression for HTTP/2
|
|
https://tools.ietf.org/html/rfc7541
|
|
|
|
|
|
## Directory
|
|
|
|
The ```raw-data``` directory has original stories of header data in
|
|
json.
|
|
|
|
Other than ```raw-data``` directory, the HPACK implementations have
|
|
their own directories to store the result of its encoder.
|
|
|
|
You can perform interoperability testing for your implementation with
|
|
them.
|
|
|
|
## File Name
|
|
|
|
Each json in story-#{n}.json is story case and shares compression
|
|
context. Each story is either series of requests or responses.
|
|
|
|
## JSON Format
|
|
|
|
Each json has:
|
|
|
|
- description: general description of encoding strategy or implementation.
|
|
- cases: array of test cases.
|
|
- seqno: a sequence number. 0 origin.
|
|
- header_table_size: the header table size sent in SETTINGS_HEADER_TABLE_SIZE and ACKed just before this case. The first case should contain this field. If omitted, the default value, 4,096, is used.
|
|
- wire: encoded wire data in hex string.
|
|
- headers: decoded http header in hash.
|
|
|
|
To test the decoder implementation, for each story file, for each case
|
|
in ```cases``` in the order they appear, decode compressed header
|
|
block in ```wire``` and verify the result against the header set in
|
|
```headers```. Please note that elements in ```cases``` share the same
|
|
compression context.
|
|
|
|
To test the encoder implementation, generate json story files by
|
|
encoding header sets in ```headers```. Using json files in
|
|
```raw-data``` is handy. Then use your decoder to verify that it can
|
|
successfully decode the compressed header block. If you can play with
|
|
other HPACK decoder implementations, try decoding your encoded data
|
|
with them. If there is any mismatch, then there must be a bug in
|
|
somewhere either encoder or decoder, or both.
|
|
|
|
```js
|
|
{
|
|
"description": "Encoded request headers with Literal without index only.",
|
|
"cases": [
|
|
{
|
|
"seqno": 0,
|
|
"header_table_size": 4096,
|
|
"wire": "1234567890abcdef",
|
|
"headers": [
|
|
{ ":method": "GET" },
|
|
{ ":scheme": "http" },
|
|
{ ":authority": "example.com" },
|
|
{ ":path": "/" },
|
|
{ "x-my-header": "value1,value2" }
|
|
]
|
|
},
|
|
.....
|
|
]
|
|
}
|
|
```
|
|
|
|
## Original Data
|
|
|
|
These Header Data are converted from https://github.com/http2/http_samples
|
|
|
|
|
|
## Compression Ratio
|
|
|
|
https://github.com/http2jp/hpack-test-case/wiki/Compression-Ratio
|
|
|
|
|
|
## Contributor
|
|
|
|
- jxck
|
|
- summerwind
|
|
- kazu-yamamoto
|
|
- tatsuhiro-t
|
|
|
|
|
|
## License
|
|
|
|
The MIT License (MIT)
|