.NET 中的 HTTP 支援
超文字傳輸通訊協定 (或 HTTP) 是一種從網頁伺服器要求資源的通訊協定。 System.Net.Http.HttpClient 類別可用於傳送 HTTP 要求和接收來自資源 (由 URI 識別) 的 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 |
❌ 否 | ❌ 否 | ❌ 否 |
†只有在適當的
Cache-Control
或Expires
回應標頭存在時,才能快取POST
方法。 這在實務上非常罕見。
HTTP 狀態碼
.NET 透過 HttpClient 為 HTTP 通訊協定提供完整支援,該通訊協定是大部分網際網路流量的來源。 如需詳細資訊,請參閱使用 HttpClient 類別提出 HTTP 要求。 應用程式藉由捕捉 HttpRequestException,以便接收 HTTP 通訊協定錯誤。 如果呼叫的方法未傳回回應訊息,則會在具有 HttpResponseMessage.StatusCode 的 HttpResponseMessage 中,或在具有 HttpRequestException.StatusCode 的 HttpRequestException 中報告 HTTP 狀態碼。 如需錯誤處理的詳細資訊,請參閱 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 進行變更。
用戶端錯誤狀態碼
用戶端錯誤狀態碼表示用戶端的要求無效。
伺服器錯誤狀態碼
伺服器錯誤狀態碼表示伺服器遇到無法滿足要求的非預期狀況。