Real World HTTP 第2版の1章を読んだ
の続編
Real World HTTP 第2版 ―歴史とコードに学ぶインターネットとウェブ技術
を買ったマスタカです
2章 HTTP/1.0のセマンティクス:ブラウザの基本機能の裏側
を読んだので新しく知ったことをまとめる
curlコマンド
・URL ENCODE
curlに-dをつけると
formのデータを送信する
curlに–data-urlencodeをつけると
上記に加えて+が%20になったりして正式なエンコードになる
・マルチパートフォーム
curlに-Fをつけると
boundary=—hogehoge
みたいなものがヘッダーについて
ヘッダー + 空行 + コンテンツ
という形でデータが並ぶ。
データごとに違うヘッダーを設定できるのが特徴
---hogehoge Content-Disposition: form-data; name="title" Hello ---hogehoge Content-Disposition: form-data; name="author"; filename="test.txt" Content-Type: text/plain aaa ---hogehoge
・圧縮
curlに–compressedをつけると
Accept-Encoding: deflate, gzip
がつく
deflateはzlibというライブラリで提供されている圧縮アルゴリズム
・クッキー
curlに-cをつけると受信したクッキーを保存する
curlに-bをつけるとファイルからクッキーを読み込んで送信する
・Basic認証
curlに-u user:pass をするとBasic認証にユーザ名とパスワードを送れる
ブラウザ
・ブラウザが同一サイトと判定する基準
スキーム
ドメイン(ホスト)
ポート
が同一であるとき
・SameSite
StrictかLaxだと、自分のサイトへのPostリクエストを他のサイトから実施したときにクッキーを飛ばさなくなる
Strictだとaタグの遷移でもクッキーが飛ばなくなる。ログインもやり直しになる
・キャッシュ
IF-Modified-Since
リクエスト時に時刻を送って更新がなければサーバーは304を返し、ボディを返さない
・Expires
キャッシュだとサーバーにリクエストするためボディがあっても遅延する
Expiresならリクエストしなくなるので高速になる
・Etag
ユーザによってキャッシュするかしないかを変えたい時がある
If-None-Match
を使って更新がなければ304を返却する
Etagは値として時刻でなくハッシュを利用する
Golang
・if文
代入して、そのまま条件にできる
if err := f(); err != nil { // error handling }
https://qiita.com/tenntenn/items/791bb47f4cee178b52c3
こうして2章のブラウザの基本的な仕組みを理解しましたとさ
curlって結構リッチなんですねw
まだまだ続くよ