HTTP 100 Continue in Go

使おうとするたびに忘れて調べなおすのでメモ。

HTTP のレスポンスコード 100 は、クライアントが大きなデータを送る前に送信ヘッダレベルで リクエストの受付が可能か調べて、処理可能ならいったん返すためにある。

用途例: Authorization ヘッダによる認証, Content-Length によるサイズチェック

Go の http.Client では TransportExpectContinueTimeout を 0 以上に設定し、リクエストヘッダに Expect: 100-continue を入れれば、自動で 100 Continue を待機 してからボディを送るようになる。

http.Server は request.Body から読みだすと自動で 100 Continue 応答をクライアントに投げる。 なので 200 以外のエラーは Body から読みだす前にヘッダをチェックして返すようにすれば良い。