Поддержка HTTP в .NET
Протокол гипертекстовой передачи (или HTTP) — это протокол для запроса ресурсов с веб-сервера. Класс System.Net.Http.HttpClient предоставляет возможность отправлять HTTP-запросы и получать HTTP-ответы от ресурса, определяемого URI. Многие типы ресурсов доступны в Интернете, и 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 предоставляет полную поддержку протокола HTTP, который составляет основную часть интернет-трафика вместе с HttpClient. Дополнительные сведения см. в статье Создание HTTP-запросов с помощью класса HttpClient. Приложения получают ошибки протокола HTTP, перехватив HttpRequestException. Коды состояния 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.
Код состояния 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 |
Коды состояния ошибок клиента
Коды состояния ошибки клиента указывают, что запрос клиента недопустим.
Коды состояния ошибки сервера
Коды состояния ошибки сервера указывают на то, что сервер столкнулся с непредвиденным состоянием, которое не позволило выполнить запрос.