お手製リクエストを飛ばす〜HTTPメッセージに関して〜

イントロダクション

Socketでリクエストを飛ばす方法を探していて見つけたのでメモ

HTTPリクエストの中身

要点1:HTTPリクエストとは?

「HTTPリクエストはクライアントが送信してサーバーにアクションを起こさせるリクエストと、サーバーの回答であるレスポンスの、2 種類のメッセージがあります。」

要点2:HTTPリクエストのデータ形式

「HTTP メッセージは ASCII でエンコードされたテキスト情報で構成されており、複数の行にまたがります。」

<HTTPメッセージ>

POST / HTTP/1.1
Host: localhost:8000
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36
Sec-Metadata: destination=image, site=same-origin
Accept: image/webp,image/apng,image/*,*/*;q=0.8
Referer: http://localhost:8000/
Accept-Encoding: gzip, deflate, br
Accept-Language: ja,en-US;q=0.9,en;q=0.8

<メソッド>

・POST / HTTP/1.1
・GET /background.png HTTP/1.0

・HEAD /test.html?query=alibaba HTTP/1.1
・OPTIONS /anypage.html HTTP/1.0

ちょっと試してみる

通常HTTPヘッダなどを直接指定することはない(だいたいアプリケーション(フレームワークなど)側でやっている)ので今まで触らなかったがヘッダ情報にオリジナルのヘッダを加えてみた。

オリジナルヘッダ追加リクエスト

>>>> Testing <<<<<
127.0.0.1 - - [13/Dec/2018 14:54:35] "GET / HTTP/1.1" 200 -
Created Header!
File CLosed!
*** POST ***
Content-Length: 16
Content-Type: text/plain
Message: Hello

「Hello」は引数で与えたもので、実際に渡す値はなんでも良い(テキストであれば)



<オリジナルヘッダを入れた場合>

*** POST ***
Content-Length: 16
Content-Type: text/plain
Message: Hello

*** BODY ***
Hello

<オリジナルヘッダを入れない場合>

*** POST ***
Content-Length: 0
Content-Type: text/plain

*** BODY ***
None