超文本传输协议(或 HTTP)是用于从 Web 服务器请求资源的协议。 该 System.Net.Http.HttpClient 类公开了从 URI 标识的资源发送 HTTP 请求和接收 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 协议的全面支持,该协议占据大多数 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 来进行更改。
客户端错误状态代码
客户端错误状态代码指示客户端的请求无效。
服务器错误状态代码
服务器错误状态代码指示服务器遇到阻止其满足请求的意外条件。