2021/02/07

私はHTTPをよく知らない

「自分、組み込み屋ですので」でネットワークのことから逃げられる時代はもう終わった・・・。
いや、ずいぶん前に終わっていたのだが、認める勇気がなかったのだろう。

ネットワークは、socketを開いてlistenさせ、相手側はconnectすればあとはプロトコルで勝手にやればよい、くらいの知識で十分だったのだが、もうちょっと上の方も知らないと話に追いつけないのだ。

MQTTは実装したことがあるので調べ直せば思い出しそうだが、やはりHTTPをスルーはできまい。
というわけで、今回はHTTPについてさらっとまとめよう。


HTTPといえば、やはりブラウザだろう。
昔はMosaicというブラウザがあってね、SunのSS10で見せてもらったことが記憶に残っているよ。

HyperText Transfer Protocolの略で、HTTP。

https://ja.wikipedia.org/wiki/Hypertext_Transfer_Protocol
https://tools.ietf.org/html/rfc2616
https://developer.mozilla.org/ja/docs/Web/HTTP/Overview

3番目に載せたMozillaの説明がわかりやすそうだ。

  • クライアント・サーバプロトコル
  • クライアントのメッセージ:リクエスト
  • サーバのメッセージ:レスポンス
  • 直接クライアントとサーバが接続することもあるし、間にプロシキが挟まることもある。
  • プロトコルとしてはリクエスト間に関係性は無い(ステートレス)。ただCookieによってセッションという概念を持ち込むことはできる。

 

クライアントとサーバのフローはそれぞれメッセージを投げるだけなので、あとはメッセージの仕様を確認すればなんとなくHTTPがわかったと思ってよいのでは無かろうか。

HTTPメッセージ
https://developer.mozilla.org/ja/docs/Web/HTTP/Overview#http_messages

 

リンク先の画像ではちょっと分かりづらいかもしれんが、1行目はこう。

Method + (space) + Path + (space) + Version of the protocol

Pathは、たとえばcurlコマンドで "curl http://127.0.0.1/time" とアクセスしたとすると、

GET /time HTTP/1.1

となった。


むかし組み込みのHTTPサーバをデバッグしたこともあるし、デバッグ用にHTTPサーバをPocoライブラリ使って作業したことがあるのだが、暗号の処理と同じ感じ匂いがしている。
危ないので自分で実装するものじゃ無いよね、というやつだ。

ただ、自分で実装しない=自分で知っておく必要はない、ではないのだ。まあ万人が知っておく必要があるというものでもないとは思うが、知っていると楽しいと思うのだよ。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。