Поддержка 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 ❌ Нет ⚠️ Rarely ❌ Нет
PUT ✔️ Да ❌ Нет ❌ Нет
PATCH ❌ Нет ❌ Нет ❌ Нет
DELETE ✔️ Да ❌ Нет ❌ Нет
HEAD ✔️ Да ✔️ Да ✔️ Да
OPTIONS ✔️ Да ❌ Нет ✔️ Да
TRACE ✔️ Да ❌ Нет ✔️ Да
CONNECT ❌ Нет ❌ Нет ❌ Нет

† Метод POST кэшируется только в том случае, если существуют соответствующие Cache-Control заголовки или Expires заголовки ответа. Это очень редко на практике.

Коды состояния HTTP

.NET обеспечивает полную поддержку протокола HTTP, который учитывается для большинства интернет-трафика с HttpClientпомощью протокола . Дополнительные сведения см. в статье "Создание HTTP-запросов с помощью класса HttpClient". Приложения получают ошибки протокола HTTP путем перехвата HttpRequestException. Коды состояния HTTP передаются с HttpResponseMessageHttpResponseMessage.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.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

Коды состояния ошибок клиента

Коды состояния ошибки клиента указывают, что запрос клиента недопустим.

Код состояния 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

См. также