.NET での HTTP のサポート
ハイパーテキスト転送プロトコル (HTTP) は、Web サーバーにリソースを要求するためのプロトコルです。 System.Net.Http.HttpClient クラスは、HTTP 要求を送信し、URI によって識別されるリソースから HTTP 応答を受信する機能を公開します。 Web 上では多くの種類のリソースが利用可能であり、HTTP では、これらのリソースにアクセスするための一連の要求メソッドが定義されています。
HTTP 要求メソッド
要求メソッドは、いくつかの要因によって区別されます。最初の要因は "動詞" ですが、次の特性によっても区別されます。
- 要求メソッドは、結果を変更せずに複数回正常に処理できる場合、"べき等" です。 詳細については、「RFC 9110: 9.2.2 冪等性メソッド」を参照してください。
- 要求メソッドは、対応する応答を再利用のために格納できる場合、"キャッシュ可能" です。 詳細については、「RFC 9110: セクション 9.2.3 メソッドとキャッシュ」を参照してください。
- 要求メソッドは、リソースの状態を変更しない場合、"安全なメソッド" と見なされます。 すべての "安全なメソッド" は "べき等" でもありますが、すべての "べき等" メソッドが "安全" であると見なされるわけではありません。 詳細については、「RFC 9110: セクション 9.2.1 安全なメソッド」を参照してください。
HTTP メソッド | べき等 | キャッシュ可能 | 安全 |
---|---|---|---|
GET |
✔️ はい | ✔️ はい | ✔️ はい |
POST |
❌ いいえ | ⚠†ほとんどない | ❌ いいえ |
PUT |
✔️ はい | ❌ いいえ | ❌ いいえ |
PATCH |
❌ いいえ | ❌ いいえ | ❌ いいえ |
DELETE |
✔️ はい | ❌ いいえ | ❌ いいえ |
HEAD |
✔️ はい | ✔️ はい | ✔️ はい |
OPTIONS |
✔️ はい | ❌ いいえ | ✔️ はい |
TRACE |
✔️ はい | ❌ いいえ | ✔️ はい |
CONNECT |
❌ いいえ | ❌ いいえ | ❌ いいえ |
†
POST
メソッドは、適切なCache-Control
またはExpires
応答ヘッダーが存在する場合のみキャッシュ可能です。 これは実際には、非常にまれです。
HTTP 状態コード
.NET は、HttpClient によって、インターネット トラフィックの大部分を構成する HTTP プロトコルに対する包括的なサポートを提供します。 詳細については、「HttpClient クラスを使用して HTTP 要求を行う」を参照してください。 アプリケーションでは、HttpRequestException をキャッチすることによって HTTP プロトコル エラーを受信します。 HTTP 状態コードは、呼び出されたメソッドが応答メッセージを返さない場合、HttpResponseMessage で HttpResponseMessage.StatusCode、または HttpRequestException で HttpRequestException.StatusCode で報告されます。 エラー処理の詳細については、「HTTP エラー処理」を参照してください。状態コードの詳細については、「RFC 9110、HTTP セマンティクス: 状態コード」を参照してください。
情報の状態コード
情報の状態コードには、中間の応答が反映されます。 HttpStatusCode.Continue などの多くの中間応答は、HttpClient を使用して内部的に処理され、ユーザーに表示されることはありません。
HTTP 状態コード | HttpStatusCode |
---|---|
100 |
HttpStatusCode.Continue |
101 |
HttpStatusCode.SwitchingProtocols |
102 |
HttpStatusCode.Processing |
103 |
HttpStatusCode.EarlyHints |
成功した状態コード
成功した状態コードは、クライアントの要求が正常に受信され、理解され、受け入れられたことを示します。
HTTP 状態コード | HttpStatusCode |
---|---|
200 |
HttpStatusCode.OK |
201 |
HttpStatusCode.Created |
202 |
HttpStatusCode.Accepted |
203 |
HttpStatusCode.NonAuthoritativeInformation |
204 |
HttpStatusCode.NoContent |
205 |
HttpStatusCode.ResetContent |
206 |
HttpStatusCode.PartialContent |
207 |
HttpStatusCode.MultiStatus |
208 |
HttpStatusCode.AlreadyReported |
226 |
HttpStatusCode.IMUsed |
リダイレクト状態コード
リダイレクト状態コードでは、要求を満たすためにユーザー エージェントがアクションを実行する必要があります。 自動リダイレクトは既定でオンになっていますが、HttpClientHandler.AllowAutoRedirect または SocketsHttpHandler.AllowAutoRedirect を使用して変更できます。
HTTP 状態コード | HttpStatusCode |
---|---|
300 |
HttpStatusCode.MultipleChoices または HttpStatusCode.Ambiguous |
301 |
HttpStatusCode.MovedPermanently または HttpStatusCode.Moved |
302 |
HttpStatusCode.Found または HttpStatusCode.Redirect |
303 |
HttpStatusCode.SeeOther または HttpStatusCode.RedirectMethod |
304 |
HttpStatusCode.NotModified |
305 |
HttpStatusCode.UseProxy |
306 |
HttpStatusCode.Unused |
307 |
HttpStatusCode.TemporaryRedirect または HttpStatusCode.RedirectKeepVerb |
308 |
HttpStatusCode.PermanentRedirect |
クライアント エラー状態コード
クライアント エラー状態コードは、クライアントの要求が無効であることを示します。
サーバー エラー状態コード
サーバー エラー状態コードは、サーバーで予期しない状態が発生し、要求を満たすことができなかったことを示します。
関連項目
.NET