Step-by-Step

HTTP 상태 코드 (Http Status Code) 본문

IT 기술

HTTP 상태 코드 (Http Status Code)

희주(KHJ) 2023. 2. 18. 21:57

HTTP

  • Hyper Text Transfer Protocol 
  • 클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜

 

 

HTTP 상태 코드

  • 클라이언트가 보낸 HTTP 요청에 대한 서버의 응답 코드
  • 총 3자리 : 응답의 클래스(1자리) + 세부 상태(2자리) 로 구성

 

 

응답의 클래스 

  • 1xx (정보) : 요청을 받으면서 프로세스를 계속함
  • 2xx (성공) : 요청을 성공적으로 받았으며 인식했고 수용함
  • 3xx (리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요함
  • 4xx (클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없음
  • 5xx (서버 오류) : 서버가 명백히 유효한 요청에 대해 충족을 실패함

 

 

1xx (조건부 응답)

 

상태코드 내용 설명
100 Continue 서버가 클라이언트로부터 요청을 받았으며, 나머지 요청을 기다리는 중이다. 클라이언트는 추가 요청을 하거나 이미 모든 요청을 완료한 경우 더 이상 보내지 않고 무시해도 되는 경우이다.
101 Switching Protocol 클라이언트가 서버에 프로토콜 전환을 요청했고 서버는 이를 승인하는 중이다.
102 Processing 서버가 요청을 수신하였고 이를 처리중이지만, 아직 제대로 된 응답을 알려줄 수 없음을 나타낸다.

 

2xx (성공)

 

상태코드 내용 설명
200 OK 서버가 요청을 성공적으로 처리했음을 의미한다. (주로 GET 요청에 해당)
201 Created 요청이 성공적으로 수행되었으며, 새로운 리소스가 생성됨을 의미한다. (주로 POST, PUT 요청에 해당)
202 Accepted 요청은 접수되었지만, 처리는 완료되지 않음을 의미한다. 다른 프로세스에서 처리 / 서버가 요청을 다루고 있는 경우 / 배치 프로세스를 하고 있는 경우 를 위해 만들어졌다. 
203 Non-Authoritative
Information
서버가 요청을 성공적으로 처리했지만, 다른 소스에서 수신된 정보를 제공하고 있다. 요청에 대한 검증이 되지 않음을 의미한다.
204 No Content 서버가 요청을 성공적으로 처리했지만, 콘텐츠를 제공하지 않음을 의미한다.
205 Reset Content 서버가 요청을 성공적으로 처리했지만, 콘텐츠를 표시하지 않음을 의미한다. 
204 No Content 와 달리 요청자가 콘텐츠를 재설정할 것을 요구한다.
206 Partial Content 서버가 GET 요청의 일부만 성공적으로 처리했음을 의미한다.
207 Multi-Status 여러 소스에서 여러 응답인 상태에서 적절한 정보를 사용자에게 제공할 수 있도록 하는 응답코드이다.
208 Already Reported DAV 바인딩 멤버는 이미 응답의 앞 부분에 열거되어 있으며 다시 포함되지 않음을 의미한다.

 

3xx (리다이렉션 완료)

 

상태코드 내용 설명
300 Multiple Choices 요청에 대해 하나 이상의 리소스가 존재함을 의미한다. 서버가 사용자 에이전트에 따라 수행할 작업을 선택하거나, 요청자가 선택할 수 있는 작업 목록을 제공한다.
301 Moved Permanently 요청한 리소스의 URI가 변경되었음을 의미한다. 요청한 페이지를 새 위치로 영구적으로 이동한다. GET 또는 HEAD 요청에 대해 해당 응답을 표시하면, 요청자가 자동으로 새 위치로 전달된다.
302 Found 요청한 리소스의 URI가 일시적으로 변경되었음을 의미한다. 현재 서버가 다른 위치의 페이지로 요청에 응답하고 있지만, 향후 요청시 원래 위치를 계속 사용해야 한다.
303 See Other 요청한 리소스를 다른 URI에서 GET 요청을 통해 얻어야 할 때의 응답이다. 서버가 사용자의 GET 요청을 처리하여 다른 URL에서 요청된 정보를 가져올 수 있도록 한다.
304 Not Modified 리소스가 수정되지 않음을 의미한다. 해당 응답을 받을 경우, 클라이언트는 서버로부터 리소스 재전송을 받지 않고, 캐싱된 리소스를 사용한다.
305 Use Proxy 프록시를 사용하여 요청한 페이지만 액세스 할 수 있다. 해당 응답은 요청자가 사용할 프록시를 가리키는 것이기도 한다.
307 Temporary Redirect 302와 동일하게 일시적인 컨텐츠 이동을 나타낼 경우 사용되나, HTTP 메소드 변경을 허용하지 않는다.
308 Permanent Redirect 301와 동일하게 영구적인 컨테츠 이동을 나타낼 경우 사용되나, HTTP 메소드의 변경을 허용하지 않는다.

 

※ Redirection

1) 영구적인 리다이렉션 (301, 308)

  • 301 : HTTP 메서드를 GET으로 바꾸고, body 없이 전송함
  • 308 : 전송받은 HTTP 메서드를 유지하고, body도 유지하여 전송함

2) 일시적인 리다이렉션 (302, 307, 303)

  • 302 : HTTP 메서드를 GET으로 바꾸고, body 없이 전송함
  • 307 : 전송받은 HTTP 메서드를 유지하고, body도 유지하여 전송함
  • 303 : HTTP 메서드를 GET으로 바꾸고, body 없이 전송함

          → 페이지 리프레시를 막기 위해 POST / PUT 뒤에 사용됨

3) 특수 리다이렉션 (300, 304)

  • 300 : 본문의 HTML 페이지 내에 선택지가 나열되어 사용자가 선택 및 클릭 후 리다이렉트
  • 304 : (오래된) 로컬에 캐시된 복사본으로 페이지를 리다이렉트

 

 

4xx (클라이언트 오류)

 

상태코드 내용 설명
400 Bad Request 요청 자체가 잘못되었을 경우 사용하는 코드이다. 잘못된 문법으로 인하여 서버가 요청을 이해할 수 없음을 의미한다.
401 Unauthorized 인증이 필요한 리소스에 인증없이 접근한 경우 사용된다. 해당 응답코드는 브라우저에 어떤 인증 방식을 사용할 것인지 보내야 한다. 권한이 없는 경우 403을 이용해야 한다.
403 Forbidden 서버가 요청을 거부하는 경우이다. 사용자가 리소스에 필요한 권한을 갖고 있지 않다.
404 Not Found 서버가 요청한 페이지를 찾을 수 없는 경우 사용하는 코드이다. 서버에 존재하지 않는 페이지에 대한 요청이 있을 경우 해당 코드를 제공한다.
405 Method Not Allowed PUT DELETE 등 서버에서 허용되지 않은 메소드로 요청할 경우 사용하는 코드이다.
406 Not Acceptable 요청은 정상이지만, 서버에서 받아들일 수 없는 요청일시 사용하는 코드이다. 보통 웹 방화벽에 걸리는 경우 해당 코드가 반환된다.
407  Proxy Authentication
Required
프록시 인증이 필요한 경우 사용하는 코드이다.
408 Request Timeout 요청 중 시간이 초과되었을 경우 사용하는 코드이다. 서버가 사용되지 않는 연결을 끊고 싶어하는 것을 의미하며, 일부 서버는 메시지를 보내지 않고 연결을 끊어버리기도 한다.
409 Conflict 사용자의 요청이 서버의 상태와 충돌하여 응답하는 코드이다.
410 Gone 단순히 찾는 리소스가 해당 부분에 없는 경우인 404와 달리 찾는 리소스가 영원히 사라진 경우 사용하는 코드이다.
411 Length Required 서버에 요청시 Content-Lenght 값을 지정하지 않아 서버에서 응답을 거부할 때 사용하는 코드이다.
412 Precondition Failed 클라이언트 헤더에 있는 전제조건이 해당 서버의 전제조건과 맞지 않는 경우 코드이다.
413 Payload Too Large 요청 본문이 너무 긴 경우 응답하는 코드이다. 큰 첨부파일을 올릴 때 해당 코드가 발생하곤 한다.
414 URI Too Long URI가 너무 길 때 발생하는 코드이다.
415 Unsupported
Media Type
사용자가 요청한 미디어타입이 서버에서 지원하지 않은 타입이어서, 응답을 거부할 때 상요하는 코드이다.
416 Requested Range
Not Satisfiable
요청 헤더의 Range로 지저한 범위가 잘못되었을 경우 사용하는 코드이다.
429 Too Many Request 일정 시간 동안 너무 많은 요청을 보냈을 때, 이를 거부하기 위해 사용되는 코드이다.
431 Request Header Fields
Too Large
요청한 헤더 값이 너무 커서 서버에서 처리하지 않음을 알려주는 응답 코드이다.

 

 

 

5xx (서버 오류)

 

상태코드 내용 설명
500 Internal Server Error 서버에 오류가 발생해 작업을 수행할 수 없을 경우 사용되는 코드이다.
501 Not Implemented 서버에 요청을 수행할 수 있는 기능이 없는 경우, 서버가 요청을 이행하는 데 필요한 기능을 지원하지 않는 경우 사용되는 코드이다.
502 Bad Gateway 게이트웨이가 연결된 서버로부터 잘못된 응답을 받았을 경우 사용되는 코드이다.
503 Service Temporary
Unavailable
서비스를 일시적으로 사용할 수 없을 경우 사용되는 코드이다. (웹서버 과부하로 다운 등)
504 Gateway Timeout 게이트웨이가 연결된 서버로부터 응답을 받을 수 없었을 경우 사용되는 코드이다.
505 HTTP Version
Not Supported
HTTP 버전을 서버가 처리할 수 없는 경우이다.
506 Variant Also Negotiates 서버 내부 구성(값)에 오류가 있어 반환되는 값에 컨텐츠 협상이 순환 참조로 이루어져 있다는걸 알려주는 코드이다.
507 Insufficient Storage 서버 내부 구성(값)에 오류가 있어 선택된 가변 리소스는 투명한 콘텐츠 협상에 참여하도록 구성되므로 협상 과정에서 적절한 끝점이 아님을 알려주는 코드이다.
510 Not Extended 서버가 요청을 처리할때 요청에 대한 추가 확장이 필요한경우 뜨는 응답코드이다.
511 Network Authentication
Required
사용자가 네트워크 엑세스 권한이 필요한 경우 뜨는 응답코드이다. 주로 네트워크에 엑세스 할 때 로그인이 필요한 경우 사용된다.

 

 

 

 

[참조]

https://www.whatap.io/ko/blog/40/

https://ko.wikipedia.org/wiki/HTTP_상태_코드

https://velog.io/@sangyeon217/http-status-code

https://developer.mozilla.org/ko/docs/Web/HTTP/Redirections#attr2

 

 

Comments