情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

サーバサイドウェブ開発基礎 HTTP詳説 動作の制御

HTTPの動作を制御する方法について解説します。

Expectヘッダフィールド

ExpectヘッダフィールドはHTTPリクエストにおいて設定できるヘッダフィールドであり、サーバの動作に対してオプションを適用するために使用することができます。

Expectヘッダフィールドの値にはサーバの動作に対して適用する1個以上のオプションのリストを,区切りで指定します。

オプションには下のようなものがあります(現在は1つしか定められていません)。

  • 100-continue

オプションの大文字と小文字は区別されませんが、小文字のみを使用するべきであり、大文字は使用するべきではありません。

サーバはExpectヘッダフィールドの値にサーバがサポートしていないオプションが指定されているHTTPリクエストを受け取った場合にはステータスコードが417Expectation Failed)のHTTPレスポンスを返信するようにします。

100-continueオプション

100-continueオプションはクライアントが送信中のHTTPリクエストのボディを送信する前に暫定的なHTTPレスポンスか最終的なHTTPレスポンスを受け取ることをサーバに要求するために使用することができます。

これにより、ボディを送信するまでもなく失敗する蓋然性が高いHTTPリクエストを効率良く行うことができます。

100-continueオプションがExpectヘッダフィールドの値に指定されているHTTPリクエストの処理の流れは下のようになります。

クライアントはExpectヘッダフィールドの値に100-continueオプションを指定したHTTPリクエストを作成し、リクエスト行とヘッダのみをサーバに送信します。

サーバはリクエスト行とヘッダのみに対する処理を開始し、Expectヘッダフィールドの値に100-continueオプションが指定されていることを認識します。

この場合、サーバはリクエスト行とヘッダのみに基づいて(すなわち、ボディを受け取らないで)すぐに最終的なHTTPレスポンスを返信するかを決定します。

すぐに最終的なHTTPレスポンスを返信することを決定した場合には最終的なHTTPレスポンスを作成し、返信し、処理を完了します。

逆に、すぐには最終的なHTTPレスポンスを返信しないことを決定した場合には暫定的なHTTPレスポンスとしてステータスコードが100Continue)のHTTPレスポンスを返信します(100-continueというオプションの名称はここから来ています)。

この場合、クライアントはボディを送信します。

そして、サーバはボディを受け取ったらHTTPリクエスト全体に基づいて処理を行い、最終的なHTTPレスポンスを作成し、返信し、処理を完了します。

ただし、クライアントはリクエスト行とヘッダのみを送信した後、暫定的なHTTPレスポンスか最終的なHTTPレスポンスを受け取る前にボディの送信を開始することもできます。

また、サーバは暫定的なHTTPレスポンスを返信する前にボディの一部又は全部を受け取った場合には暫定的なHTTPレスポンスの返信を止めることができます。その場合、サーバはボディ全体を受け取ってからHTTPリクエスト全体に基づいて処理を行うことになります。

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-http, web