使おうとするたびに忘れて調べなおすのでメモ。
HTTP のレスポンスコード 100 は、クライアントが大きなデータを送る前に送信ヘッダレベルで リクエストの受付が可能か調べて、処理可能ならいったん返すためにある。
用途例: Authorization ヘッダによる認証, Content-Length によるサイズチェック
Go の http.Client では Transport で ExpectContinueTimeout
を
0 以上に設定し、リクエストヘッダに Expect: 100-continue
を入れれば、自動で 100 Continue を待機
してからボディを送るようになる。
http.Server は request.Body から読みだすと自動で 100 Continue 応答をクライアントに投げる。 なので 200 以外のエラーは Body から読みだす前にヘッダをチェックして返すようにすれば良い。