Real World HTTP 第2版の4章を読んだ

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も少し詳しくなりましたとさ
まだまだ続くよ

関連記事:

Pocket