共用方式為


.NET 中的 HTTP 支援

超文本傳輸通訊協定 (或 HTTP) 是一種從網頁伺服器要求資源的通訊協定。 類別 System.Net.Http.HttpClient 會公開從 URI 所識別的資源傳送 HTTP 要求和接收 HTTP 回應的能力。 網路上許多可用的資源類型,且 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 ❌ 否 ❌ 否 ❌ 否

僅當適當的POSTCache-Control響應標頭存在時,Expires方法才能被快取。 這在實務上非常罕見。

HTTP 狀態碼

.NET 提供 HTTP 通訊協定的完整支援,此通訊協定會使用 HttpClient來說明大部分因特網流量。 如需詳細資訊,請參閱 使用 HttpClient 類別提出 HTTP 要求。 應用程式會藉由攔截 HttpRequestException來接收 HTTP 通訊協定錯誤。 HTTP 狀態代碼會在HttpResponseMessage中使用HttpResponseMessage.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.AllowAutoRedirectSocketsHttpHandler.AllowAutoRedirect 變更。

HTTP 狀態代碼 HttpStatusCode
300 HttpStatusCode.MultipleChoicesHttpStatusCode.Ambiguous
301 HttpStatusCode.MovedPermanentlyHttpStatusCode.Moved
302 HttpStatusCode.FoundHttpStatusCode.Redirect
303 HttpStatusCode.SeeOtherHttpStatusCode.RedirectMethod
304 HttpStatusCode.NotModified
305 HttpStatusCode.UseProxy
306 HttpStatusCode.Unused
307 HttpStatusCode.TemporaryRedirectHttpStatusCode.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 我是茶壺 🫖
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

另請參閱