HTTP 상태코드란?
HTTP 상태코드는 클라이언트가 보낸 HTTP(Hypertext Transfer Protocol) 요청에 대한 서버의 응답 코드로, 상태 코드에 따라 요청의 성공/실패 여부를 판단한다.
HTTP 상태 코드의 분류
상태 코드의 첫 번째 숫자에 따라 크게 5가지로 분류된다.
- 1xx : Informational
- 2xx : Success
- 3xx : Redirection
- 4xx : Client Error
- 5xx : Server Error
HTTP 상태 코드 상세
자주 사용되는 HTTP 상태 코드를 정리해보았다
HTTP 상태코드는 크게보면 100 ~ 599 까지 다양한 상태코드가 존재한다. 여기서 중요할 만한 상태코드를
짜집어서 소개해 보겠다.
1XX : 조건부 응답
Request received, continuing process( 요청과 수신후 계속된 작업)
요청을 받았으며 작업을 계속한다는 의미입니다. (이 상태 코드는 만날일이 거의 없다고 보면 됩니다.)
상태 코드 | 요역 | 설명 |
100 | Continue | 클라이언트가 서버로 보낸 요청에 문제가 없으니 다음 요청을 이어서 보내도 된다는 것을 의미한다. 만약 클라이언트의 작업이 완료 되었다면 이 응답은 무시해도 된다. |
2XX : 성공 ( sucess )
The action was successfully received, understood, and accepted ( 요청이 성공과 동시의 인식하고 수용함을 의미)
요청을 성곡적으로 받았으며, 인식학 , 수용함을 의미합니다.
상태코드 | 요역 | 설명 |
200 | OK | 요청이 성공적으로 수행되었음을 의미, 주로 GET 요청에 대한 응답 |
201 | Created | 요청이 성공적으로 수행되었으며, 그 결과로는 새로운 리소스가 생성됨을 의미함, 주로 POST 요청에 대한 응답 |
202 | Accepted | 요청은 접수되었지만, 처리는 완료되지 않았음을 의미함, 배치 처리와 같이 요청 접수 후 일정 시간이 지난 후 요청을 처리하는 경우의 응답. |
203 | Non-Authoritative Information |
요청이 성공적으로 수행되었으나, 요청에 대한 검증이 되지 않음을 의미한다. |
204 | No Content | 요청이 성공적으로 수행되었고, 응답 payload에 보낼 데이터가 없음을 의미한다. 주로 삭제 요청에 대한 응답으로 사용됨 |
205 | Reset Content | 서버가 요청을 성공적으로 처리했지만 콘텐츠를 표시하지 않는다. 클라이언트가 콘텐츠를 재설정할 것을 요구한다. |
206 | Partial Connet | 서버가 GET 요청의 일부만 성공적으로 처리했음을 의미 |
3XX : 리다이렉션 완료
Further action must be taken in order to complete the request
요청 완료를 위해 추가 작업 조치가 필요함을 의미한다.
상태코드 | 요약 | 설명 |
300 | Mutiple Choices | 요청에 대해 하나 이상의 리소스가 존재함을 의미 |
301 | Moved Parmanently | 요청한 리소스의 URl이 변경됨을 의미한다. 해당 응답을 받으면 브라우저는 HTTP 헤더에 들어있는 Location 필드를 찾아 해당 필드가 존재할 경우, Location 필드에 담긴 URL에 자동으로 리다이렉션한다. |
302 | Found | 요청한 리소스의 URI가 일시적으로 변경되었음을 의미한다. |
303 | See Other | 요청한 리소스를 다른 URI에서 GET요청을 통해 얻어야 할 때의 응답 이다. |
304 | Not Modified | 수정되지 않음을 의미, 해당 응답을 받으면, 클라이언트는 서버로 부터 리소스를 재전송 받지 않고, 캐싱된 리소스를 사용한다. |
307 | Temporary Redirect | 302와 유사하며, User-Agent가 반드시 HTTP 메소드를 변경하지 말아야 한다는 점만 다르다 |
308 | Permanent Redirec | 301과 유사하며, User-Agent가 반드시 HTTP 메소드를 변경하지 말아야한 다는 점만 다르다. |
301, 302 VS. 308, 307
307코드는 302와 유사하고 308은 301과 유사하다. 차이점은 307,308은 전송받은 HTTP Method를 유지한다는 점이다.
301과 302는 리다이렉트시킬 때 HTTP 메소드를 GET으로 바꿔서 전송한다. 따라서 GET 요청을 보낼 떄는 문제 없지만,
POST 요청을 했을 때 문제가 발생할 수 있다.
예를 들어, HTTP -> HTTPS 로 리다이렉트를 구현할 때, 301 또는 302를 쓰게 되면 HTTP Protocol(HTTP 프로토콜)을
통해 POST 요청한 것이 HTTPS 프로토콜을 통해 GET 요청으로 변경되면서 컨트롤러나 라우터에 매핑되는 URI가 없어
오류가 나게 된다고 한다. 따라서 301 대신에 308을, 302 대신에 307을 쓰면 좀 더 안전하게 리다이렉트시킬 수 있다고 한다.
자세한 설명:
4XX : 요청 오류
The request contains bad syntax or cannot be fulfiled
요청의 문법이 잘못 되거나 요청을 처리할 수 없음을 의미한다.
상태 코드 | 요약 | 설명 |
400 | Bad Request | 잘못된 문법 등으로 인해 클라이언트가 올바르지 못한 요청을 보내 서버가 요청을 이해할 수 없다. |
401 | Unauthorized | 인증되지 않는 사용자가 인증에 필요한 리소스를 요청하는 경우 응답한다. 보통 로그인이 필요한 API를 비로그인 사용자가 호출할 경우 사용 |
403 | Forbidden | 클라이언트가 콘텐츠에 접근할 권한을 가지고 있지 않음을 의미한다. 401과 다른 점으로는 서버가 클라이언트가 누구인지 알고 있다는 것이다. 보통 특정 IP나 국가가 차단되어 있는 사이트에 접속을 시도할 경우 사용된다. |
404 | Not Found | 요청한 리소스가 존재하지 않음을 의미. 인증되지 않은 클라이언트로 부터 리소스를 숨기기위해 403 대신 이 응답을 전송하기도 한다. |
405 | Method Not Allowed | 현재 리소스에 맞지 않는 메소드를 사용했음을 의미. 예로는 GET 요청만 허용하는데 POST 요청을 할 경우에 응답 |
406 | No Acceptable | 알맞은 컨텐츠 타입이 없음을 의미. 서버의 리소스가 클라이언트의 HTTP 헤더에 들어있는 Accept 필드에 명시된 콘텐츠 타입이 아닌 경우의 응답 |
408 | Request Timeout | 요청에 응답하는 시간이 너무 오래 걸림을 의미 |
409 | Conflict | 요청이 현재 서버의 상태와 충돌될때를 의미한다. |
412 | Percondition Failed | 서버가 요청자에게 요청 시 부과한 사전 조건을 만족하지 못했을 경우의 응답 |
413 | Payload Too Large | 요청이 너무 커서 서버가 처리할 수 없을 때의 응답 |
429 | Too many Requests | 클라이언트가 지정된 시간에 너무 많은 요청을 보낸 경우의 응답이다. |
5XX : 서버 오류
The server failed to fulfill an apparently valid request
서버가 명백히 유효한 요청에 대해 충족을 실패했음을 의미한다.
상태 코드 | 요약 | 설명 |
500 | Internal Server Error | 서버에 오류가 발생하면서 응답을 할수 없음을 의미, 서버에 오류가 발생했으나 처리 방법을 알수 없는 경우의 응답 |
501 | Not Implemented | 클라이언트 요청에 대한 서버의 응답 수행 기능이 없음을 의미 |
502 | Bad Gateway | 서버가 게이트웨이로부터 잘못된 응답을 수신했음을 의미, 서버의 부모 서버에서 오류가 발생한 경우의 응답. 보통 서버에 접속하는 사용자가 많이 과후화 될때 발생한다. |
503 | Service Unavailable | 서버가 요청을 처리할 준비가 되지 않음을 의미, 일반적으로 유지보수를 위해 작동이 중단되거나 과부화가 걸린 경우의 대한 응답 |
504 | Gateway Timeout | 서버가 게이트웨이 역할을 하고 있으며, 한 서버가 엑세스하고 있는 다른 서버에서 적시에 응답을 받지 못했음을 의미 |
실습 사이트
HTTP 상태 코드가 어떤 것이 있는지 아는 것으로 감을 잡을 수 없지만 실제로 HTTP 요청에 대한 응답 코드를 확인 할 수 있는 사이트가 있다.
위 사이트에서 응답 지연 및 모든 응답값을 확인 해 볼수 있다.
https://httpstat.us/{응답코드}?sleep={응답지연시간}
응답 지연 시간은 밀리 초(ms) 단위 이다.
예를 들어서, 200 응답코드에 응답지연시간을 10초로 설정해 테스트 해볼려면
https://httpstat.us/200?sleep=10000
로 접속하면 된다. 그러면 10초 pending된 후 아래와 같이 응답하는 것을 볼 수 있다.
쉘로 응답코드 확인하기
httpstat 란 도구를 사용해 쉘로 응답코드를 확인해보자.
(설치 및 cURL 옵션을 확인해보려면 github링크 참조)
Reference
'웹개념' 카테고리의 다른 글
[웹개념] 웹 브라우적의 작동원리 (0) | 2022.01.16 |
---|---|
CORS란 무엇인가? (0) | 2021.10.12 |
Cookie vs LocalStorage vs SessionStorage (0) | 2021.10.12 |