.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 |
❌ 否 | ❌ 否 | ❌ 否 |
†仅当存在相应的
Cache-Control
或Expires
响应标头时,POST
方法才可缓存。 这在实践中非常罕见。
HTTP 状态代码
.NET 使用 HttpClient 提供对 HTTP 协议的全面支持,该协议占据大多数 Internet 流量。 有关详细信息,请参阅使用 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 进行更改。
客户端错误状态代码
客户端错误状态代码指示客户端的请求无效。
服务器错误状态代码
服务器错误状态代码指示服务器遇到了阻止其完成请求的意外条件。