협업시 니 잘못(프론트) 내 잘못(백)을 쉽게 파악하기 위해 HTTP 상태코드를 정리하고자 한다.
HTTP는 서버와 클라이언트 사이에 데이터를 주고받기 위해 사용하는 통신방식이다.
예를 들어 웹 브라우저 주소창에 https://www.naver.com
을 입력하고 엔터를 누르면
웹 클라이언트와 웹 서버 사이에 HTTP 연결이 맺어지고 웹 클라이언트는 웹 서버에 HTTP 요청 메세지를 보낸다.
웹 서버는 요청에 따른 처리를 진행한 후 그 결과를 웹 클라이언트에 HTTP 응답 메세지로 보낸다.
이렇게 우리는 요청 메세지와 응답 메세지를 주고 받으며 웹을 사용하는 것이다!
서버에서의 처리 결과는 응답 메시지의 상태 라인에 있는 상태 코드(Status Code)를 보고 파악할 수 있다.
100-500번 대의 상태 코드들에 대해 알아보자.
1XX
Informational (정보제공)
: 임시 응답
: 현재 클라이언트의 요청까지는 처리되었으니 계속 진행하라는 의미
2XX
Success (성공)
: 클라이언트의 요청이 서버에서 성공적으로 처리되었다는 의미
3XX
Redirection (리다이렉션)
: 완전한 처리를 위해 추가 동작이 필요한 경우
: 주로 서버의 주소 또는 요청 URI의 웹 문서가 이동됐으니 그 주소로 다시 시도하라는 의미
4XX
Client Error (클라이언트 에러)
: 없는 페이지를 요청하는 등 클라이언트의 요청 메시지 내용이 잘못된 경우
5XX
Server Error (서버 에러)
: 서버에서 메세지 처리에 문제가 발생한 경우
: 서버의 부하, DB 처리 오류, 서버에서 익셉션이 발생한 경우
상태 코드 | 상태 텍스트 | 뜻 | 서버 측 의미 |
---|---|---|---|
1XX | Informational | 정보 제공 | 클라이언트 요청을 받았고 작업을 계속 진행하고 있음 |
100 | Continue | 계속 | 계속 진행 : 클라이언트는 요청 헤더에 'Expect: 100-continue'를 보내고 서버는 이를 처리할 수 있으면 이 코드로 응답 |
101 | Switching Protocols | 프로토콜 전환 | 프로토콜 전환해라 |
102 | Processing | 처리 중 | 처리 중 : 서버가 처리하는데 많은 시간이 예상되어 클라이언트에서 타임 아웃이 발생하지 않도록 이 응답 코드를 보냄 |
103 ~ 199 | Unassigned | 현재 할당되지 않은 상태 코드 |
상태 코드 | 상태 텍스트 | 뜻 | 서버 측 의미 |
---|---|---|---|
2XX | Success | 성공 | 클라이언트가 요청한 동작을 수신하여 성공적으로 처리했음 |
200 | OK | 성공 | 서버가 요청을 성공적으로 처리했음 |
201 | Created | 생성됨 | 요청이 처리되어 새로운 리소스 생성됨 |
202 | Accepted | 허용됨 | 요청은 접수했지만, 처리 완료 안됨 |
203 | Non-Authoritative | 신뢰할 수 없는 정보 | 응답 헤어가 오리지널 서버로부터 제공된 것이 아님 |
204 | No Content | 콘텐츠 없음 | 처리를 성공했지만 클라이언트에게 돌려줄 콘텐츠 없음 : Delete 요청에 대한 응답에 많이 사용 |
205 | Reset Content | 콘텐츠 재설정 | 처리를 성공했고 브라우저 화면 리셋해라 |
206 | Partial Content | 일부 콘텐츠 | 콘텐츠의 일부만을 보냄 |
207 | Multi-Status | 다중 상태 | 처리 결과의 스테이터스가 여러 개 : 응답은 성공했지만 각각 처리 결과가 성공인지는 바디를 봐야 알 수 있음 |
208 ~ 299 | Unassigned | 현재 할당되지 않은 상태 코드 |
상태 코드 | 상태 텍스트 | 뜻 | 서버 측 의미 |
---|---|---|---|
3XX | Redirection | 리다이렉션 | 클라이언트는 요청을 마치기 위해 추가 동작을 해야함 |
300 | Multiple Choices | 여러 선택항목 | 선택 항목이 여러개 있음 : 지정 URI에 대해 콘텐츠 협상을 수행한 결과, 서버에서 콘텐츠를 결정하지 못하고 클라이언트에게 복수 개의 링크를 응답할 때 사용 |
301 | Moved Permanently | 영구 이동 | 지정한 리소스가 새로운 URI로 이동 : 이동할 곳의 새로운 URI는 응답 헤더 Location에 기록 |
302 | Found | 다른 위치 찾음 | 요청한 리소스를 다른 URI에서 찾음 |
303 | See Other | 다른 위치 보기 | 다른 위치로 요청해라 : 브라우저의 폼 요청을 POST로 처리하고 결과 화면으로 리다이렉트 시킬 때 자주 사용하는 응답 코드 |
304 | Not Modified | 수정되지 않음 | 마지막 요청 이후 요청한 페이지는 수정되지 않았음 : 조건부 GET 요청일 때 지정한 리소스가 갱신되지 않았음을 알려 줌 |
305 | Use Proxy | 프록시 사용 | 지정한 리소스에 엑세스하려면 프록시를 통해야함 : 응답 헤어 Location에 프록시의 URI를 기록 |
306 | (Unused) | 예전에 사용하다 현재는 사용하지 않는 상태코드 | |
307 | Temporary Redirect | 임시 리다이렉션 | 임시로 리다이렉션 요청이 필요함 : 요청한 URI가 없어 클라이언트 메소드를 그대로 유지한 채 응답 헤더 Location에 표시된 다른 URI로 요청을 재송신할 필요가 있음 |
308~ 399 | Unassigned | 현재 할당되지 않은 상태 코드 |
상태 코드 | 상태 텍스트 | 뜻 | 서버 측 의미 |
---|---|---|---|
4XX | Client Error | 클라이언트 에러 | 클라이언트의 요청에 오류 |
400 | Bad Request | 잘못된 요청 | 요청의 구문이 잘못됐음 |
401 | Unauthorized | 권한 없음 | 지정한 리소스에 대한 엑세스 권한이 없음 |
402 | Payment Required | 결제 필요 | 지정한 리소스를 엑세스하기 위해서는 결제가 필요하다. |
403 | Forbidden | 금지됨 | 지정한 리소스에 대한 엑세스 금지됨 : 401 인증 처리 이외의 사유로 리소스에 대한 액세스가 금지되었음을 의미 |
404 | Not Found | 찾을 수 없음 | 지정한 리소스 찾을 수 없음 |
405 | Method Not Allowed | 허용되지 않은 메소드 | 요청한 URI가 지정한 메소드를 지원하지 않음 |
406 | Not Acceptable | 수용할 수 없음 | 클라이언트가 Accept-* 헤더에 지정한 항목에 관해 처리할 수 없음 |
407 | Proxy Authentication Required | 프록시 인증 필요 | 클라이언트는 프록시 서버에 인증이 필요함 |
408 | Request Timeout | 요청 시간 초과 | 요청을 기다리다 서버에서 타임아웃 함 |
409 | Conflict | 충돌 | 서버가 요청을 수행하는 중에 충돌이 발생 |
410 | Gone | 사라짐 | 지정한 리소스가 이전에는 존재했지만, 현재는 존재하지 않음 : ex) 기간 한정된 프로모션 사이트가 사라진 경우 사용할 수 있는 응답 코드 |
411 | Length Required | 길이 필요 | 요청 헤더에 Content-Length를 지정해야함 |
412 | Precondition Failed | 사전 조건 실패 | If-Match와 같은 조건부 요청에서 지정한 사전 조건이 서버와 맞지 않음 |
413 | Request Entity Too Large | 요청 객체가 너무 큼 | 요청 메세지가 너무 큼 : 서버는 접속을 끊음 |
414 | Request-URI Too Large | 요청 URI가 너무 김 | 요청 URI가 너무 김 |
415 | Unsupported Media Type | 지원하지 않는 미디어 유형 | 클라이언트가 지정한 미디어 타입을 서버가 지원하지 않음 |
416 | Range Not Satisfiable | 처리할 수 없는 요청 범위 | 클라이언트가 지정한 리소스의 범위가 서버의 리소스 사이즈와 맞지 않음 |
417 | Expectation Failed | 예상 실패 | 클라이언트가 지정한 Expect 헤더를 서버가 이해할 수 없음 |
418 ~ 421 | Unassigned | 현재 할당되지 않은 상태 코드 | |
422 | Unprocessable Entity | 처리할 수 없는 엔티티 | 클라이언트가 송신한 XML이 구문은 맞지만, 의미상 오류 있음 |
423 | Locked | 잠김 | 지정한 리소스는 잠겨있음 |
424 | Failed Dependency | 의존 관계로 실패 | 다른 작업의 실패로 인해 본 요청도 실패 |
426 | Upgraded Required | 업그레이드 필요함 | 클라이언트의 프로토콜의 업그레이드 필요 |
428 | Precondition Required | 사전 조건 필요 | If-Match와 같은 사전조건을 지정하는 헤더가 필요 |
429 | Too Many Requests | 너무 많은 요청 | 클라이언트가 주어진 시간 동안 너무 많은 요청을 보냄 : 요청의 속도를 제한할 때 사용 |
431 | Request Header Fields Too Large | 너무 큰 헤더 | 헤더의 길이가 너무 큼 |
444 | Connection Closed Without Response | 응답 없이 | |
연결 닫음 | 응답을 보내지 않고 연결을 종료 | ||
451 | Unavailable For Legal Reasons | 법적 사유로 불가 | 법적으로 문제가 있는 리소스를 요청함 |
452 ~ 499 | Unassigned | 현재 할당되지 않은 상태 코드 |
상태 코드 | 상태 텍스트 | 뜻 | 서버 측 의미 |
---|---|---|---|
5XX | Server Error | 서버 에러 | 클라이언트의 요청은 유효한데 서버가 처리에 실패 |
500 | Internal Server Error | 내부 서버 오류 | 서버 에러 발생 |
501 | Not Implemented | 구현되지 않음 | 요청한 URI의 메소드에 대해 서버가 구현하고 있지 않음 |
502 | Bad Gateway | 불량 게이트웨이 | 게이트웨이 또는 프록시 역할을 하는 서버가 그 뒷단의 서버로부터 잘못된 응답을 받음 |
503 | Service Unavailable | 서비스 제공불가 | 현재 서버에서 서비스를 제공할 수 없음 : 보통은 서버 과부하나 서비스 점검 등 일시적인 상태 |
504 | Gateway Timeout | 게이트웨이 시간초과 | 게이트웨이 또는 프록시 역할을 하는 서버가 그 뒷단의 서버로부터 응답을 기다리다 타임아웃이 발생 |
505 | HTTP Version Not Supported | HTTP 버전 미지원 | 클라이언트가 요청에 사용한 HTTP 버전을 서버가 지원하지 않음 |
506 | Unassigned | 현재 할당되지 않은 상태 코드 | |
507 | Insufficient Storage | 용량 부족 | 서버에 저장 공간 부족으로 처리에 실패 |
512 ~ 599 | Unassigned | 현재 할당되지 않은 상태 코드 |