다음을 통해 공유


.NET의 HTTP 지원

하이퍼텍스트 전송 프로토콜(또는 HTTP)은 웹 서버에서 리소스를 요청하기 위한 프로토콜입니다. System.Net.Http.HttpClient 클래스는 URI로 식별된 리소스에서 HTTP 요청을 보내고 HTTP 응답을 수신하는 기능을 노출합니다. 많은 유형의 리소스를 웹에서 사용할 수 있으며 HTTP는 이러한 리소스에 액세스하기 위한 요청 메서드 집합을 정의합니다.

HTTP 요청 메서드

요청 메서드는 먼저 동사 다음과 같은 특성으로 여러 요인을 통해 구분됩니다.

HTTP 메서드 idempotent이다 캐시할 수 있나요? 안전합니다.
GET ✔️ 예 ✔️ 예 ✔️ 예
POST ❌ 아니요 ️ ⚠드물게 ❌ 아니요
PUT ✔️ 예 ❌ 아니요 ❌ 아니요
PATCH ❌ 아니요 ❌ 아니요 ❌ 아니요
DELETE ✔️ 예 ❌ 아니요 ❌ 아니요
HEAD ✔️ 예 ✔️ 예 ✔️ 예
OPTIONS ✔️ 예 ❌ 아니요 ✔️ 예
TRACE ✔️ 예 ❌ 아니요 ✔️ 예
CONNECT ❌ 아니요 ❌ 아니요 ❌ 아니요

POST 메서드는 적절한 Cache-Control 또는 Expires 응답 헤더가 있는 경우에만 캐시할 수 있습니다. 이것은 실제로 매우 드문 일입니다.

HTTP 상태 코드

.NET은 대부분의 인터넷 트래픽을 차지하는 HTTP 프로토콜에 대해 포괄적인 지원을 제공합니다. HttpClient 자세한 내용은 HttpClient 클래스사용하여 HTTP 요청 만들기를 참조하세요. 애플리케이션은 HttpRequestException을(를) 사용하여 HTTP 프로토콜 오류를 처리합니다. 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

참고하세요