オライリーのReal World HTTPをとりあえず一周読んでみたので、理解したところ理解できてないところを自分の記録よう用にまとめたいと思います。
読んでるけどなかなかいい pic.twitter.com/3ZSCMRnKyd
— 宮川 竜太朗 (@DragonTaro1031) October 25, 2018
全体の流れ
この本ではHTTPがどのように発展してきたのかを時系列で追いながら解説されています。
HTTP/1.0から始まり、1.1、2.0と話が進んでいき、最初はコアな実装について学びどんどん最新の技術について学んでいくという流れです。
ところどころGo言語での実装の章があり、実際に動かしながら学んでいけます。
僕は全体の流れを掴みたかったので、実装の部分は軽く目を通しただけで実装はしていません。もう一度読む予定なので、そのときに実装までできたらと考えています。
HTTP/1.0
前半は全ての基礎となるHTTP/1.0(0.9)の話でした。
HTTPはheaderとbodyとmethod/pathとstatus codeの4要素から構成されていること、具体的にどのようなことができるプロトコルなのかが説明されています。
基本的な仕組みなのでサクサク進めることができました。ほとんど確認みたいなものです。
新しく理解したところ
中には今までなんとなくしか理解ができていなかったところもあり、この本を読んだことできっちり理解することができました。
- text/html → 大項目/詳細
- multipart/form-data → ファイル(複数可)も送信可能
- POSTのデフォはapplication/x-www-form-urlencodedでencode
- query stringでの+は空白
- X-~~ は自前のheader
- Content-Typeで指定してるのは送るデータの種類今まで何となく使ってたのがちゃんと理解できた。
— 宮川 竜太朗 (@DragonTaro1031) October 25, 2018
- HeaderにはRefererがあってどこのサイトからのアクセスなのかがわかる(ブラウザの標準機能)
- ブラウザから送らないように設定できる(シークレットモードかな?)
- CSRFの対策として使われてたが、ブラウザの設定次第では動作しなくなるから現在は使われてない#RealWorldHTTP— 宮川 竜太朗 (@DragonTaro1031) October 25, 2018
本文の内容と直接関係はないですが、とても分かりやすい例え等もあり知ってる内容でも読んでいて飽きませんでした。
公開鍵と暗号鍵の関係は、南京錠(公開鍵)とそれを開ける鍵(秘密鍵)の関係
この南京錠をいっぱいばらまいでそれで蓋をして貰えば、鍵を持ってる人間以外には中身をしられることはないと
めっちゃ分かりやすい例やな
HTTPと直接関係はないけどw#RealWorldHTTP— 宮川 竜太朗 (@DragonTaro1031) October 26, 2018
理解が足りないところ
Cacheまわりが相変わらず苦手というか難しいなと感じました。
ETagによる判定や、サーバーからの指定などあまり意識したことのないところも多くありまだまだ理解が足りないです。
また、これはこの章に限ったことではないのですが、プロキシが入ってきた通信やトランスポート層の絡むと一気に分からなくなるのでもう少しレイヤーを下げた部分もしっかり勉強します、、
HTTP1.1〜2.0
この辺りからほとんど知らない話ばかりでした。上述のトランスポート層の話が入ってきてどんどん迷子になりました。
理解したところ
web-socketなしでどのようにサーバーから情報を送信する方法として、ポーリングやロングポーリングがあることをしりました。
またクライアントがGPSを使わずに自分の居場所を推定する方法なども取り上げられていて面白い内容が多かったです。
JSON-RPCなどのRPCを使った、RESTとは違うアーキテクチャでのAPIの構築なども学びの一つです。
また、OAuth以外の認可・認証の方法も紹介されていたので実装してみようと思います。
HTTP2.0では、やっと身近に使われているセマンティクスが出てきたのでまだ理解できることが多かったです。ogpやJSON-LDなどは実装されているものをよく見るので理解しやすかったです。
セマンティックウェブはつまりbotなどのマシンにとって理解しやすい(=解析しやすい)インターフェイスを作ろうっていう取り組みと解釈して問題ないのかな?って感じです。
理解できなかったところ
特に理解ができなかったところとしては、WebRPC・ストリーミング周り・AMPです。
WebRPCがブラウザ間のP2Pを扱うプロトコル、ストリーミングが動画などを細かくパケット化して通信するもの、AMPがスマホに最適化したサイトを構築するもの、というところまでは理解できました。
が、それ以上の細かいところはほんとによくわかりませんでした。。
どれも触ってみるしかないのかなぁ、、
あとは、トランスポート層の知識が必要な部分もあったので、先にそっちの勉強をするのもいいのかなと思ったり。
セキュリティ周り・REST API
このあたりは基本的なことが多かったです。
一度どこかでしっかりと勉強していれば簡単に理解できることでしょう。