SQA Insider

ソフトウェア品質保証、ソフトウェアテストについてのメモ書き。

Transfer-Encoding: chunked なリクエストの作り方

世の中にはchunkedリクエストをするHTTPクライアントが存在するらしいです。
確かにRFC的にはchunkedはかならずしもサーバー側の実装だけを想定しているとは読み取れないですね。

さて、chunkedなリクエストを送る方法ですが、Fiddlerを使うと簡単にできます。
ComposerのRawで、以下のようにリクエストを組み立ててあげます。

POST http://testserver.example.com/testcontents.htm HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: ja-JP,en-US;q=0.5
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
DNT: 1
Host: testserver.example.com
Pragma: no-cache
Transfer-Encoding: chunked

9
123456789
8
12345678
0

この場合、リクエストボディサイズは17バイトとなります。
BODY部分、0のあとには空行が必要です。
ちなみにチャンクサイズの「9」「8」は16進数である点に注意してください。

先ほどのchunkedリクエストは、受け手となるサーバーでは以下のリクエストと等価として扱われるはずです。

POST http://testserver.example.com/testcontents.htm HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: ja-JP,en-US;q=0.5
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
DNT: 1
Host: testserver.example.com
Pragma: no-cache
Content-Length: 17

12345678912345678