なんとなく「HTTPってシンプルな仕組みだよね?」って思ってたんだけど、実はぜんぜんそんなことなかったみたいで…😳💭
今さらだけど、HTTP(ウェブページを表示するときに使うあの通信のやつ)ってけっこう奥が深いんだなーって思ったんだ✨
HTTPがシンプルじゃないってどういうこと?
普通、ブラウザでサイト見るときって「URL入れてエンター」→「ウェブページが表示される」って感じでめっちゃ自然じゃん?でも実は、その裏では
- リクエストとレスポンスのやり取りがすごく複雑
- バージョンごとにルールも変わる
- 予想外の問題が起きやすい
っていう事実があるんだ🌸
たとえばHTTP/1.1とHTTP/2、HTTP/3ってバージョン違いがあるけど、それぞれ動き方もぜんぜん違うから、対応が結構むずかしいんだよね💡
HTTPの“裏側”の話をもうちょっとだけ
-
接続の確立や切断のタイミングが大事
→ これがズレると通信が遅くなったり、途中で切れちゃうこともあるの🥺 -
キャッシュの扱いも変わる。キャッシュって「一度取った情報を覚えておいて速くする」ってやつね
→ でもこれがちゃんと動いてないと、古い情報見せちゃったりして困るんだ😮💨 -
ヘッダーの細かいルールがいっぱい、これ守らないと相手に正しく伝わらなかったり…
→ プロトコルって言葉通り「お約束」なんだけど、これが何重にもあって混乱しがち💬
どうしてHTTPはこんなに複雑になったの?
昔は「ウェブページを見るだけ」のために作られたけど、
- 今は動画や音楽のストリーミング
- APIでのやり取り
- セキュリティ対策
みたいに使い方が多様化してて、いろんな場面に対応するために機能が増えたんだよね🧠
つまり、便利になった分だけ「単純なやり取り」じゃなくなってしまったというわけ✨
なんで知っておくといいの?
普段は気にしないかもしれないけど、ネットの仕組みにちょっとでも興味あるなら、
- どういうふうに通信が成り立ってるか
- どこでトラブルが起きやすいか
を知っておくと、サイトやサービスを作る人とか、ネットが遅いのを直したいときに強い味方になると思うよ👍
HTTPって言葉自体は身近だけど、その内側はまるで小さなドラマみたいにいろんなルールや問題が絡み合ってるんだなーって思うと、ネットってちょっとだけ不思議で面白い気がしてくるよね🌸✨
コメント
ミア
タイトル読んだ時点で「HTTPが簡単なわけない、curlがもっとシンプルになってるはず」と思ったら、案の定Danielのブログだった。
グレース
HTTPは簡単じゃないよ、それはSMTPの話。
レオ
デバッグにポート80へtelnetしてたやついる?
ロバート
「HTTPの考え方はまだシンプルかも」って多分そういう意味だよね。
ベン
HTTPは複雑だけどHTTPSは簡単? Sはそれを意味する…いや違うけどね。
クリス
初期の技術がテキストベースなのは面白いよね、HTTPに限らずBashスクリプトもそうだし。
リリー
確かに始めるのは簡単だけど、空白とかエスケープ、エンコーディング、数字の扱いとかミスが多いのがテキストベースの欠点。
キンバリー
経験上、テキストベースは広く使うほどもっと厳密に定義されてほしくなるんだよね。
マックス
HTTP/1.1のRFCだけで9万字超、全部読むのに7時間以上かかるって…C++23の仕様知ったら驚くよ。
サラ
新人なんだけど、みんな独自のインターフェース作って複雑にしすぎて、実はシンプルでいいはずって思ってるのは自分だけじゃなくて安心した。
エイダン
この投稿、タイプミス多いけどすごくいいし、Daniel Stenbergは天才でcurl大好きだけどね!
ハンナ
広く普及するものに簡単なものはないよね。
ノーラン
HTMLが簡単なわけないだろ(出会い系かよ)。
サム
そうそう! だからHTTPS=HyperText Transfer Protocol Simplified(簡略版)って冗談だよね。
グレース
>ヘッダーはUTF-8じゃなくオクテットで、勝手に通すなって話だけど、UTF-8はバイトじゃないの? ASCII使えってこと?
リリー
RFCには書いてなかったけど、このStack Overflowの回答ではISO-8859-1で解析されがち、実質はWin1252らしい。
ロバート
Content-Typeヘッダーのcharset指定は本文だけに適用されるのか、それ以降の全てかは不明。
クリス
追記:この記事によるとRFC2047ではUS-ASCII以上の複雑な文字セットも許可されてたみたい。
ワット
テキストベースのHTTPより、二段階のバイナリメタフォーマット方式が簡単だと思う。
クリス
まず低レベルで符号付き・符号なし整数や浮動小数点、文字コードの型を定義するバイナリフォーマット。
ミア
それを解析するビューアやツールも簡単に作れる。
ロバート
こうしたバイナリのメタプロトコルがあれば、テキスト解析の問題は一気に解決できる。
クリス
そして上位レベルでHTTP相当の構造をこのメタフォーマットで定義する感じだね。