.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 状態コードは、呼び出されたメソッドが応答メッセージを返さない場合、HttpResponseMessageHttpResponseMessage.StatusCode、または HttpRequestExceptionHttpRequestException.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

クライアント エラー状態コード

クライアント エラー状態コードは、クライアントの要求が無効であることを示します。

HTTP 状態コード HttpStatusCode
400 HttpStatusCode.BadRequest
401 HttpStatusCode.Unauthorized
402 HttpStatusCode.PaymentRequired
403 HttpStatusCode.Forbidden
404 HttpStatusCode.NotFound
405 HttpStatusCode.MethodNotAllowed
406 HttpStatusCode.NotAcceptable
407 HttpStatusCode.ProxyAuthenticationRequired
408 HttpStatusCode.RequestTimeout
409 HttpStatusCode.Conflict
410 HttpStatusCode.Gone
411 HttpStatusCode.LengthRequired
412 HttpStatusCode.PreconditionFailed
413 HttpStatusCode.RequestEntityTooLarge
414 HttpStatusCode.RequestUriTooLong
415 HttpStatusCode.UnsupportedMediaType
416 HttpStatusCode.RequestedRangeNotSatisfiable
417 HttpStatusCode.ExpectationFailed
418 I'm a teapot 🫖
421 HttpStatusCode.MisdirectedRequest
422 HttpStatusCode.UnprocessableEntity
423 HttpStatusCode.Locked
424 HttpStatusCode.FailedDependency
426 HttpStatusCode.UpgradeRequired
428 HttpStatusCode.PreconditionRequired
429 HttpStatusCode.TooManyRequests
431 HttpStatusCode.RequestHeaderFieldsTooLarge
451 HttpStatusCode.UnavailableForLegalReasons

サーバー エラー状態コード

サーバー エラー状態コードは、サーバーで予期しない状態が発生し、要求を満たすことができなかったことを示します。

HTTP 状態コード HttpStatusCode
500 HttpStatusCode.InternalServerError
501 HttpStatusCode.NotImplemented
502 HttpStatusCode.BadGateway
503 HttpStatusCode.ServiceUnavailable
504 HttpStatusCode.GatewayTimeout
505 HttpStatusCode.HttpVersionNotSupported
506 HttpStatusCode.VariantAlsoNegotiates
507 HttpStatusCode.InsufficientStorage
508 HttpStatusCode.LoopDetected
510 HttpStatusCode.NotExtended
511 HttpStatusCode.NetworkAuthenticationRequired

関連項目