HTTP プロトコルでのCR.LF.

HTTPのクライアント動作をTELNETで確認する際によく出てくる

GET / HTTP1.1

というメッセージ送信ですが、行末にCR、LFを付けます。

プロトコル1.0以降?ではHost も指定しないと Bad Requestになると思うので、

Host: example.com とセットで

GET /index.html HTTP1.1CRLFHost: example.comCRLFCRLF

と最後は空行CRLFを追加します。

ここまでは何となくの習慣でそうしてました。具体的なコード上でCRは0x0d(\r)LFは0x0a(\n)なので、\r\n\r\n などと記述することになります。

で、何気なくとあるサンプルプログラムを見ていると、LFだけ書かれていました。

\r\n\r\nではないのですが、サンプルだけあってちゃんと動作します。

このあたりが曖昧だったのでRFCで見てみると面白いことが書かれてました。結論的にはどちらでも構わないようです。

RFC 7231

出展:https://triple-underscore.github.io/RFC7231-ja.html

何だか、サーバー側は色んな改行に対応しておけみたいな事がかかれてますが、今まで通り \r\nで行きたいと思いました。