클라이언트가 서버에게 요청(request)를 보내면 서버는 응답(response)를 보낸다.
그에 대한 응답은 크게 5개의 응답 코드로 나누어진다.
다섯가지 status code의 첫 번째 숫자에 따라 response class가 달라지고, 에러마다 정의된 코드와 의미를 가지고 있다.
1XX | code_nm | definition |
---|---|---|
100 | Continue | (진행중) 요청이 받아들여졌으며 현재까지의 진행 상태에 문제가 없고 클라이언트가 계속 이어서 요청을 하거나 이미 요청을 완료한 경우에는 무시해도 되는 것을 의미 |
101 | Switching Protocol | 클라이언트가 보낸 요청 헤더의 Update 필드 중 하나로 서버가 프로토콜을 변경 |
102 | Processing | 서버가 요청을 수신하였으며 이를 처리 중이지만, 아직 제대로 된 응답을 주지 못하는 상황 |
2XX | code_nm | definition |
---|---|---|
200 | OK | 서버가 요청을 성공적으로 처리했을 시 |
201 | Created | 요청이 성공적이었으며 새로운 리소스가 생성되었을때, 일반적으로 POST, 혹은 PUT 이후에 받게 된다. |
202 | Accepted | 서버가 요청을 접수했지만 아직 처리하지는 못했을 때 |
203 | Non-Authoritative Information | 요청을 성공적으로 처리했지만 다른 소스에서 수신된 정보를 제공, 검증이 되지 않은 상태 |
204 | No Content | 서버가 요청을 성공적으로 처리했지만 콘텐츠가 없을 때 |
205 | Reset Content | 요청을 완수한 이후에 이 요청을 보낸 문서 뷰를 리셋하라는 의미 (ex. 새로고침 etc.) |
206 | Partial Content | 서버가 GET 요청의 일부만 성공적으로 처리 (Content-Range와 Date 헤더를 반드시 포함) |
207 | Multi Status | 여러 개의 리소스가 여러 status code를 갖고 있는 상황에서 적절한 정보 전달 |
208 | Already Reported | DAV*에서 사용 (WebDAV: 하이퍼텍스트 전송 프로토콜의 확장) |
3XX | code_nm | definition |
---|---|---|
300 | Multiple Choice | 클라이언트가 동시에 여러 응답이 가능한 요청을 보냈을 경우 클라이언트의 선택지를 반환 |
301 | Moved Permanently | 요청한 리소스의 URI가 변경 -> 변경된 URI에 대한 정보와 함께 응답 |
302 | Found | 요청한 리소스의 URI가 일시적으로 변경된 것이므로 원래 요청했던 URI로 요청해야 함 |
303 | See Other | 클라이언트가 요청한 작업을 하기 위해서는 다른 URI에서 얻어야 할 때 클라이언트에게 줌 |
304 | Not Modified | 이전의 요청과 비교하여 달라진 것이 없음 (캐시를 목적으로 사용됨) |
305 | Use Proxy | proxy를 통해 요청 |
306 | Unused | 지금은 사용하지 않는 코드 -> 추후 사용을 위해 예약되어 있음 |
307 | Temporary Redirect | 302와 동일하나 클라이언트가 보낸 HTTP 메소드도 변경하면 안됨 |
308 | Permanent Redirect | 요청한 리소스가 영구적으로 다른 URI에 위치하고 있음, 301과 동일하나 HTTP 메소드도 변경하지 말 것 |
4XX | code_nm | definition |
---|---|---|
400 | Bad Request | 잘못된 문법으로 요청을 보내고 있어 서버가 이해할 수 없음 |
401 | Unauthorized | 요청을 위해 권한 인증이 필요함 (ex. 토큰이 없음) 보통 서버는 로그인이 필요한 페이지에 대해 이 요청을 제공할 수 있다. |
402 | Payment Required | 서버가 요청을 접수했지만 아직 처리하지는 못했을 때 |
403 | Forbidden | 서버가 요청을 거부할 때, 클라이언트가 요청한 컨텐츠에 대해 접근할 권한이 없음 |
404 | Not Found | 서버가 요청한 URI를 찾을 수 없음, 서버에 존재하지 않는 페이지에 대한 요구를 할 때 |
405 | Method Not Allowed | 클라이언트가 보낸 메소드가 해당 URI에서 지원하지 않음 (ex. POST 방식으로만 request가 가능한데 이를 지키지 않고 GET으로 보냈을 때) |
409 | Conflict | 서버가 요청을 수행하는 중에 충돌이 발생했을 때 |
414 | URI Too Long | 요청하는 URL(일반적으로는 URL)이 너무 길었을 때 |
429 | Too Many Requests | 사용자가 일정 시간 동안 너무 많은 request를 보냈을 때 |
5XX | code_nm | definition |
---|---|---|
500 | Internal Server Error | 서버에 오류가 발생하여 요청을 수행할 수 없을 경우 |
501 | Not Implemented | 서버가 지원하지 않는 새로운 메소드를 사용하여 요청, 서버에 해당 요청을 수행할 수 있는 기능이 없는 경우 |
502 | Bad Gateway | 서버가 proxy나 gateway 등 업스트림 서버에서 잘못된 응답을 받았을 경우 |
503 | Service Unavailable | 현재 서버가 일시적으로 사용이 불가 (일반적으로 유지보수로 인해 중단되거나 과부하가 걸린 서버) |
504 | Gateway Timeout | 서버가 다른 서버로 요청을 보냈으나 delay가 발생하여 처리가 불가능 |
505 | HTTP Version Not Supported | 서버가 지원하지 않거나 적절하지 않은 프로토콜로 요청 |
506 | Variant Also Negotiates | 서버 내부 구성 오류가 있음 |
507 | Insufficient Storage | 서버 내부 구성 오류가 있음 |
508 | Loop Detected | 요청을 처리하는 동안 무한 루프를 감지 |
510 | Not Extended | 서버가 처리하기 위해서는 요청을 더 확장해야 함 |
511 | Network Authentication Required | 클라이언트가 네트워크 액세스를 얻으려면 인증이 필요 |
이런 Status Code들로 서버와의 통신 중 어떤 문제점이 발생했는지 알 수 있고, 해결할 수 있다. 자주 발생하는 Status Code들은 기억해 두는 것이 좋겠다🎃