[HTTP] HTTP 응답 상태코드 정리하기();
HTTP 응답의 상태코드 정리를 간단하게 해보자
모든 HTTP 요청에는 HTTP 응답이 있다. 그 응답 속에는 항상 상태코드(Status Code)가 있는데, 이를 통해 요청을 준 클라이언트에게 서버단의 처리 결과를 알려줄 수 있다.
개발자로서 항상 200번 대의 응답을 만나는 것은 아니니 400, 500 번대 응답도 알아두는게 도움이 될 것 같다.
HTTP 상태코드 100 ~ 1xx
100번 대의 상태코드는 정보성 상태를 의미하며 HTTP/1.1에서 첫 도입되었다.
구간 | 상태코드 | 사유구절 | 설명 |
100 ~ 1xx | 100 | Continue | 클라이언트의 요청의 일부가 받아들여졌으며, 클라이언트는 계속해서 요청의 나머지를 계속 이어서 보내야함을 의미하는 상태 |
101 | Switching Protocols | 서버가 프로토콜을 바꾸었음을 나타내는 상태 |
100번 상태코드는 클라이언트가 본문을 서버에게 보낼 때, 그 이전에 서버에서 본문을 받아들일 것이지 확인하고자 할 때 사용되며 100 Continue
로 응답한다. 클라이언트는 측에서 해당 응답을 받으려면 Expect 요청 헤더에 100-continue
값을 포함하여 보내야만 한다.
서버는 100-continue
값이 담긴 Expect 헤더가 포함된 요청을 받는다면, 100 Continue 혹은 400번 대의 에러코드로 응답해야만 한다.
HTTP 상태코드 200 ~ 2xx
200번 대의 상태코드는 '성공' 을 의미하며, HTTP 통신에서 가장 흔하게 볼 수 있다.
구간 | 상태코드 | 사유구절 | 설명 |
200 ~ 299 | 200 | OK | 요청을 정상적으로 처리하였고 본문에 요청된 리소스를 포함하고 있는 상태 |
201 | Created | 서버에 개체를 생성하라는 요청을 위한 성공 상태 | |
202 | Accepted | 서버는 클라이언트의 요청에 대하여 수용하였으나, 아직 그 어떤 동작도 수행하지 않은 상태 | |
203 | Non-Autohritative Information | 헤더에 들어있는 정보가 리소스 사본에서 왔으며, 리소스에 대한 메타 정보를 검증하지 못한 경우 응답하는 상태 | |
204 | No Content | 요청을 정상적으로 처리하였고 본문을 포함하지 않는 상태 | |
205 | Reset Content | 브라우저에게 현재 페이지에 있는 HTML 폼에 채워진 모든 값을 비우라는 것을 알려주기 위한 상태 | |
206 | Paritail Content | 클라이언트의 요청에 대하여 부분 혹은 범위적인 성공을 나타내는 상태 |
HTTP 상태코드 300 ~ 3xx
300번 대의 상태코드는 '리다이렉션' 에 대한 코드이며, 클라이언트의 요청에 대하여 원하는 리소스가 다른 위치에 있다는 것을 전달하거나 해당 리소스의 대안 응답을 제공한다.
리다이렉션 상태코드와 Location 헤더를 사용하여 브라우저에게 새 위치로 재 요청을 보내도록 할 수 있다.
구간 | 상태코드 | 사유구절 | 설명 |
300 - 3xx | 300 | Multiple Cohoices | 클라이언트가 동시에 여러 리소스를 가리키는 URL을 요청한 경우, 그 리소스의 목록과 함께 반환하는 상태 |
301 | Moved Permanently | 요청한 URL이 옮겨졌을 때 사용되는 상태. Location 헤더에 현재 리소스가 존재하고 있는 URL을 포함해야 함. |
|
302 | Found | 요청한 URL이 옮겨졌을 때 사용되는 상태. Location 헤더의 URL은 임시로 이동되는 목적으로 사용되며 이후의 요청에서는 원래의 URL을 사용해야 함. |
|
303 | See Other | 클라이언트에게 리소스를 다른 URL에서 가져올 것을 말하고자 할 때 사용되는 상태. Location 헤더에 현재 리소스가 존재하고 있는 URL을 포함해야 함. 303 상태코드의 주 목적은 POST 요청에 대한 응답이며 GET 요청으로 리다이렉트 시킨다. |
|
304 | Not Modified | 클라이언트는 If-Modified-Since 헤더를 사용하여 조건부 요청을 할 수 있다. 조건부 헤더의 정보를 바탕으로 서버의 리소스가 수정된 사항이 없을 경우 반환하는 상태. 304 상태는 리소스 수정이 없기때문에 응답 본문이 존재하지 않는다. |
|
305 | Use Proxy | 리소스가 반드시 프록시를 통해서 접근되어야 함을 나타내기 위해 사용되는 상태. |
|
307 | Temporary Redirect | 요청한 URL이 옮겨졌을 때 사용되는 상태. Location 헤더의 URL은 임시로 이동되는 목적으로 사용되며 이후의 요청에서는 원래의 URL을 사용해야 함. |
HTTP 상태코드 400 ~ 4xx
400번 대의 상태코드는 '클라이언트 요청에 대한 에러' 를 설명하는 코드이다. 클라이언트의 요청을 서버가 처리할 수 없을 경우 발생하며 대게 브라우저를 통해 처리된다.
구간 | 상태코드 | 사유구절 | 설명 |
400 ~ 4xx | 400 | Bad Request | 클라이언트의 요청이 잘못된 것을 알려주는 상태 |
401 | Unauthorized | 인증이 되지 않은 클라이언트에게 인증을 요구하기 위한 상태 | |
402 | Payment Required | 현재 사용되지 않는 상태 | |
403 | Forbidden | 서버에서 클라이언트의 요청을 거부하고자 할 때 사용되는 상태. 인증은 되었으나 허가되지 게시물에 접근하고자 할 때 발생 할 수 있음. | |
404 | Not Found | 존재하지 않는 URL에 접근할 때 응답하는 상태 | |
405 | Method Not Allowed | 요청한 URL에 대하여 지원하지 않는 메서드의 요청을 받았을 때 사용하는 상태. Allow 헤더를 포함하여 클라이언트가 인지할 수 있도록 한다. |
|
406 | Not Acceptable | 클라이언트가 요청한 URL에 대한 리소스 중 클라이언트가 받아들일 수 있는 것이 없는 경우 사용되는 상태 | |
407 | Proxy Authentication Required | 접근하는 리소스에 대한 인증을 요구하는 프락시 서버를 위해 사용되는 상태 | |
408 | Request Timeout | 클라이언트의 요청을 완수하기에 시간이 너무 많이 걸리는 경우, 서버는 408 상태를 응답하면서 연결을 끊을 수 있음. | |
409 | Conflict | 클라이언트의 요청이 리소스의 충돌을 일으킬 염려가 있을 때 사용되는 상태 | |
410 | Gone | 404 상태와 비슷하나 한 때, 서버가 해당 리소스를 갖고 있었을 경우 응답하는 상태 | |
411 | Length Required | 서버가 클라이언트의 요청에 Content-Length 헤더가 있을 것을 요구할 때 사용하는 상태 | |
412 | Precondition Failed | 클라이언트가 조건부 요청을 하였을 경우, 그 중 하나가 실패했을 때 사용하는 상태 | |
413 | Request Entity Too Large | 서버가 처리할 수 있는 한계를 넘은 크기의 요청을 클라이언트가 보냈을 경우 사용하는 상태 | |
414 | Request URI Too Long | 서버가 처리할 수 있는 한계를 넘은 길이의 요청 URL이 포함된 요청을 클라이언트가 보냈을 경우 사용하는 상태 | |
415 | Unsupported Media Type | 서버가 이해하지 못한 내용 유형의 헤더 및 본분을 클라이언트가 요청하였을 경우 응답하는 상태 | |
416 | Requested Range Not Satisfiable | 리소스의 특정 범위를 요청하였으나, 그 범위가 잘못되었을 경우 사용되는 상태 | |
417 | Expectation Failed | 요청에 포함된 Expect 요청 헤더에 서버가 만족시킬 수 없는 기대가 담겨있는 경우 사용되는 상태 |
HTTP 상태코드 500 ~ 5xx
500번 대의 상태코드는 '서버 자체 에러' 를 의미한다. 클라이언트 측에서 올바른 요청을 보냈음에도 서버가 처리를 할 수 없는 상태
구간 | 상태코드 | 사유구절 | 설명 |
500 ~ 5xx | 500 | Internal Server Error | 서버가 요청을 처리할 수 없게 만드는 에러가 발생한 경우 응답하는 상태 |
501 | Not Implemented | 클라이언트가 서버의 능력을 넘은 요청을 했을 때 사용하는 상태(서버가 지원하지 않는 메서드로 요청) | |
502 | Bad Gateway | 프록시나 게이트웨이로부터 잘못된 응답을 받았을 경우 사용되는 상태 | |
503 | Service Unavailable | 현재 서버에서 요청을 처리해줄 수 없는 상태 | |
504 | Gateway Timeout | 프록시나 게이트웨이로부터 응답을 기다리다 발생한 타임아웃에 대한 상태 | |
505 | HTTP Version Not Supported | 서버가 지원할 수 없거나 지원하지 않으려고 하는 버전의 프로토콜로 된 요청을 받았을 때 사용하는 상태 |