HTTP (HyperText Transfer Protocol)는 클라이언트와 서버 간 통신 규약을 나타내는 것임

그 중 Status Code는 서버가 (클라이언트로부터 받은) 요청에 대한 처리 결과를 나타내기 위한 숫자로, 응답 메세지의 상태 라인에 포함됨

// 서버의 응답 메세지 예시 //

HTTP/1.1 200 OK   // -> 200이라는 상태 코드를 통해 요청 처리 성공을 전달
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html

<!DOCTYPE html... (here comes the 29769 bytes of the requested web page

 

HTTP Status Code는 IANA라는 인터넷 할당 번호 관리 기관에서 "HTTP Status Code Registry"라는 이름으로 관리

(https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml)

 

1NN - 정보 제공

클라이언트의 요청을 받았으며, 요청 처리를 진행 중
(1xx 계열의 응답은 HTTP/1.1 클라이언트에게만 보낼 수 있으며 응답은 바디 없이 상태 라인, 헤더(생략 가능), 빈 줄로 종료)

100 Continue 계속 진행
(클라이언트는 요청 헤더에 ‘Expect: 100-continue’를 보내고 서버는 이를 처리할 수 있으면 이 코드로 응답)
101 Switching Protocols 프로토콜을 전환해야함
(프로토콜을 HTTP 1.1에서 업그레이드할 때 Upgrade 응답 헤더에 표시. 현재는 HTTP 1.1이 최신이므로 사용할 일이 없음)
102 Processing (WebDAV) 처리 중이다.
(서버가 처리하는 데 오랜 시간이 예상되어 클라이언트에서 타임 아웃이 발생하지 않도록 이 응답 코드를 보냄)

 

 

2NN - 요청 처리 성공

클라이언트가 요청한 동작을 수신하여 성공적으로 처리함

200 OK 서버가 요청을 성공적으로 처리
201 Created 요청이 처리되어서 새로운 리소스가 생성
(응답 헤더 Location에 새로운 리소스의 절대 URI를 기록)
202 Accepted 요청은 접수하였지만, 처리가 완료되지 않음
(응답 헤더의 Location, Retry-After를 참고하여 클라이언트는 다시 요청을 보냄)
203 Non-Authoritative
Information
응답 헤더가 오리지널 서버로부터 제공된 것이 아님
(프록시 서버가 응답 헤더에 주석을 덧붙인 경우가 하나의 예)
204 No Content 처리를 성공하였지만, 클라이언트에게 돌려줄 콘텐츠가 없음
(응답에는 헤더만 있고 바디는 없음. DELETE 요청에 대한 응답에 많이 사용됨)
205 Reset Content 처리를 성공하였고 화면을 리셋
(예를 들어 브라우저가 입력 폼을 보여 주고 있을 때 이 응답 코드를 받으면 브라우저는 모든 입력 항목을 리셋하고 재입력할 수 있는 상태가 됨)
206 Partial Content 콘텐츠의 일부만을 보냄
(응답 헤더의 Content-Range에 응답 콘텐츠의 범위를 기록. 예를 들어 1,500 바이트의 리소스 중에서 처음의 500바이트만을 보낼 때 사용할 수 있음.)
207 Multi-Status (WebDAV) 처리 결과의 스테이터스가 여러 개임
(207 응답은 성공을 뜻하지만, 각각의 처리 결과가 성공인지는 바디를 봐야 알 수 있음)

 

 

3NN - 리다이렉션 (Redirection)

클라이언트는 요청을 마치기 위해 추가 동작을 취해야 함

300 Multiple Choices 선택 항목이 여러 개가 있음
(지정한 URI에 대해서 콘텐츠 협상을 수행한 결과, 서버에서 콘텐츠를 결정하지 못하고 클라이언트에게 복수 개의 링크를 응답할 때 사용)
301 Moved Permanently 지정한 리소스가 새로운 URI로 이동함
(이동할 곳의 새로운 URI는 응답 헤더 Location에 기록)
302 Found 요청한 리소스를 다른 URI에서 찾음
(요청한 URI가 없으므로 클라이언트 메소드를 그대로 유지한 채, 응답 헤더 Location에 표시된 다른 URI로 요청을 재송신할 필요가 있음.)
* 302의 의미를 정확하게 개선해서 307을 정의하였으므로 이 응답 코드의 사용은 권장 X
303 See Other 다른 위치로 요청해야함
(요청에 대한 처리 결과를 응답 헤더 Location에 표시된 URI에서 GET으로 취득할 수 있음. 브라우저의 폼 요청을 POST로 처리하고, 그 결과 화면으로 리다이렉트시킬 때 자주 사용하는 응답 코드임)
304 Not Modified 마지막 요청 이후 요청한 페이지는 수정되지 않음
(If-Modified-Since와 같은 조건부 GET 요청일 때 지정한 리소스가 갱신되지 않았음을 알려줌. 이 응답 코드에는 바디가 없음)
305 Use Proxy 지정한 리소스에 액세스하려면 프록시를 통해야 함
(응답 헤더 Location에 프록시의 URI를 기록)
306 (현재 사용 X) 현재 사용하지 않는 상태코드임
307 Temporary Redirect 임시로 리다이렉션 요청이 필요함
(요청한 URI가 없으므로 클라이언트 메소드를 그대로 유지한 채 응답 헤더 Location에 표시된 다른 URI로 요청을 재송신해야함. 클라이언트는 향후 요청 시 원래 위치를 계속 사용해야 함.)
* 302의 의미를 정확하게 재정의해서 HTTP/1.1의 307 응답으로 추가

 

 

4NN - 클라이언트 오류 

클라이언트의 요청에 오류가 있음 (자주 사용되는 상태 코드 : 400, 401, 403, 404)

400 Bad Request 요청의 구문이 잘못됨
(클라이언트가 모르는 4xx 계열 응답 코드가 반환된 경우에도 클라이언트는 400과 동일하게 처리하도록 규정)
401 Unauthorized 지정한 리소스에 대한 액세스 권한이 없음
(응답 헤더 WWW-Authenticate에 필요한 인증 방식을 지정)
402 Payment Required 지정한 리소스를 액세스하기 위해서는 결제가 필요함
* 이 응답 코드는 실제로는 사용되지 않음
403 Forbidden 지정한 리소스에 대한 액세스가 금지됨
(401 인증 처리 이외의 사유로 리소스에 대한 액세스가 금지되었음을 의미.
리소스의 존재 자체를 은폐하고 싶은 경우도 404 응답 코드를 사용할 수 있음.)
404 Not Found 지정한 리소스를 찾을 수 없음
405 Method
Not Allowed
요청한 URI가 지정한 메소드를 지원하지 않음
(응답 헤더 Allow에 이 URI가 지원하는 메소드 목록을 기록함)
406 Not Acceptable 클라이언트가 Accept-* 헤더에 지정한 항목에 관해 처리할 수 없음
(응답 바디에는 300 응답처럼 서버가 수용 가능한 다른 선택지 리스트가 기록됨)
407 Proxy
Authentication

Required
클라이언트는 프록시 서버에 인증이 필요함
(프록시 서버의 응답 헤더 Proxy-Authenticate에 필요한 인증 방식을 지정)
408 Request Timeout 요청을 기다리다 서버에서 타임아웃함
409 Conflict 서버가 요청을 수행하는 중에 충돌이 발생함
(예를 들어 사용자명을 new_name으로 변경하려 하였지만, 서버에 이미 new_name이라는 사용자가 존재하는 경우. 응답 헤더 Location에는 충돌이 발생한 리소스의 URI를 기록함)
410 Gone 지정한 리소스가 이전에는 존재하였지만, 현재는 존재하지 않음
(예를 들어 기간이 한정된 프로모션 사이트가 사라진 경우 사용할 수 있음)
411 Length Required 요청 헤더에 Content-Length를 지정해야 함
412 Precondition Failed If-Match와 같은 조건부 요청에서 지정한 사전 조건이 서버와 맞지 않음
413 Request Entity
Too Large
요청 메시지가 너무 큼
(서버는 접속을 끊음)
414 Request-URI
Too Large
요청 URI가 너무 긺
415 Unsupported
Media Type
클라이언트가 지정한 미디어 타입을 서버가 지원하지 않음
(예를 들어 서버가 지원하는 이미지는 JPG, PNG뿐인데 클라이언트가 GIF 형식의 이미지를 요청하는 경우)
416 Range
Not Satisfiable
클라이언트가 지정한 리소스의 범위가 서버의 리소스 사이즈와 맞지 않음
417 Expectation Failed 클라이언트가 지정한 Expect 헤더를 서버가 이해할 수 없음
422 Unprocessable
Entity
(WebDAV) 클라이언트가 송신한 XML이 구문은 맞지만, 의미상 오류가 있음
423 Locked (WebDAV) 지정한 리소스는 잠겨있음
424 Failed Dependency (WebDAV) 다른 작업의 실패로 인해 본 요청도 실패함
426 Upgraded Required 클라이언트의 프로토콜의 업그레이드가 필요함
(응답에 Upgrade 헤더를 보내 필요한 프로토콜을 알려 줌)
428 Precondition
Required
If-Match와 같은 사전조건을 지정하는 헤더가 필요함.
(If-Match 헤더가 있지만, 맞지 않는 경우는 412 응답을 보냄)
429 Too Many Requests 클라이언트가 주어진 시간 동안 너무 많은 요청을 보냄
(요청의 속도를 제한할 때 사용. 응답에 Retry-After 헤더를 보내 얼마나 기다릴지를 알려 줄 수 있음)
431 Request Header
Fields Too Large
헤더의 길이가 너무 큼
(헤더의 전체 크기가 크거나 또는 하나의 헤더가 매우 큰 경우. 보통 Referer URL이 길거나 쿠키 항목이 많은 경우)
444 Connection Closed Without Response (NGINX) 응답을 보내지 않고 연결을 종료함
(보통 악의적인 요청에 대해서 사용하며, 클라이언트에서는 응답을 볼 수 없고 Nginx 로그에 나타남)
451 Unavailable For
Legal Reasons
법적으로 문제가 있는 리소스를 요청

 

5NN - 서버 오류 

서버에 오류가 발생하여 요청 처리에 실패

500 Internal Server Error 서버에 오류 발생
(클라이언트가 모르는 5xx 계열의 응답 코드가 반환된 경우에도 클라이언트는 500과 동일하게 처리하도록 규정)
501 Not Implemented 요청한 URI의 메소드에 대해 서버가 구현하고 있지 않음
502 Bad Gateway 게이트웨이 또는 프록시 역할을 하는 서버가 그 뒷단의 서버로부터 잘못된 응답을 받음
503 Service Unavailable 현재 서버에서 서비스를 제공할 수 없음
(보통은 서버의 과부하나 서비스 점검 등 일시적인 상태)
504 Gateway Timeou 게이트웨이 또는 프록시 역할을 하는 서버가 그 뒷단의 서버로부터 응답을 기다리다 타임아웃이 발생
505 HTTP Version
Not Supported
클라이언트가 요청에 사용한 HTTP 버전을 서버가 지원하지 않음
507 Insufficient Storage (WebDAV) 서버에 저장 공간 부족으로 처리에 실패

 

 

참고 자료 : https://hongong.hanbit.co.kr/http-%EC%83%81%ED%83%9C-%EC%BD%94%EB%93%9C-%ED%91%9C-1xx-5xx-%EC%A0%84%EC%B2%B4-%EC%9A%94%EC%95%BD-%EC%A0%95%EB%A6%AC/ 

'Computer Science > 네트워크' 카테고리의 다른 글

GET과 POST를 비교해보자  (0) 2024.02.04
HTTP에 대해 알아보자  (1) 2024.02.04
TCP의 3 Way HandShake  (0) 2024.02.04
TCP와 UDP를 비교해보자  (1) 2024.02.04
OSI 7계층과 TCP/IP 4계층을 비교해보자  (0) 2024.02.04

+ Recent posts