Real World HTTP 第2版の3章を読んだ
の続編
Real World HTTP 第2版 ―歴史とコードに学ぶインターネットとウェブ技術
を買ったマスタカです
4章 HTTP/1.1のシンタックス:高速化と安全性を求めた拡張
を読んだので新しく知ったことをまとめる
色々知らないことが多い章でした
・Keep-Alive
毎回コネクションを貼り直さないのでスループットが上がる
HTTP/1.0は仕様にはないがブラウザでサポートされてる
HTTP/2では常に有効になる
特にTLSだと通信の前にハンドシェイクが必要になるので効果が大きい
・共通鍵のアルゴリズム
DH鍵交換アルゴリズムというのが一例
共通鍵だから、鍵そのものを送ってるのかと思いきや
計算した結果を受け渡しすることで
鍵自体はクライアントとサーバーで別々に同じものを作り出すことができる
・TLS
サーバーの証明書の取得と検証
s_clientでTLSの接続
openssl s_client -connect google.com:443 > google.crt
証明書の内容を確認
openssl x509 -in google.crt -text
通信用の公開鍵を送信する
公開鍵そのものを送ると脆弱性になるのでTLS1.3では種だけを送る
共通鍵で暗号化してデータを送信する
・暗号スイート
TLSのバージョンとアルゴリズムのセットを暗号スイートと呼ぶ
openssl ciphers -v
・HTTP
OPTIONSは利用できるメソッドの一覧を返す
ただ405が返ってくるサイトが多そう・・・
また、ステータスコードには426があり、この場合プロトコルのアップグレードを要求できる
・chunked
curl -T ファイル名 -H “Transfer-Encoding: chunked” http://localhost:18888/debug
これを実行すると100kbずつにしてアップロードする
・データURIスキーム
ブラウザに以下を入れるとjsonが表示される
data:application/json,{"message": "hello"}
・Golang
複数の型を返す場合
https://qiita.com/gorilla0513/items/7e734c4e0680b5ea341d
func 関数名 (引数 型) (型, 型)
配列
[]byte
関数が2つ以上の同種類の引数を伴う場合省略可能
https://qiita.com/k-penguin-sato/items/deaeab18aa416496e273
func hello2(arg1, arg2 string) string { return arg1 + " " + arg2 }
戻り値に変数を割り当てる
https://blog.y-yuki.net/entry/2017/05/03/000000
func concatCount(str1 string, str2 string) (retStr string, strCount int) { retStr = str1 + str2 strCount = utf8.RuneCountInString(retStr) return }
benchmark
https://qiita.com/marnie_ms4/items/7014563083ca1d824905
benchmarkの数字について
左は関数の実行回数。多い方が良い
右は実行にかかった時間。少ない方が良い
https://qiita.com/syossan27/items/148e33dd9da4ee3dc89b
go test -bench . cpu: Intel(R) Core(TM) i5-8210Y CPU @ 1.60GHz BenchmarkRSAEncryption-4 13086 95979 ns/op BenchmarkRSADecryption-4 487 2558125 ns/op BenchmarkAESEncryption-4 4542640 301.3 ns/op BenchmarkAESDescription-4 4187326 245.8 ns/op
この章では暗号化や通信系の内容について学びました
また、Golangも少し詳しくなりましたとさ
まだまだ続くよ