Step-by-Step
HTTP 상태 코드 (Http Status Code) 본문
HTTP
- Hyper Text Transfer Protocol
- 클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜
HTTP 상태 코드
- 클라이언트가 보낸 HTTP 요청에 대한 서버의 응답 코드
- 총 3자리 : 응답의 클래스(1자리) + 세부 상태(2자리) 로 구성
응답의 클래스
- 1xx (정보) : 요청을 받으면서 프로세스를 계속함
- 2xx (성공) : 요청을 성공적으로 받았으며 인식했고 수용함
- 3xx (리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요함
- 4xx (클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없음
- 5xx (서버 오류) : 서버가 명백히 유효한 요청에 대해 충족을 실패함
1xx (조건부 응답)
상태코드 | 내용 | 설명 |
100 | Continue | 서버가 클라이언트로부터 요청을 받았으며, 나머지 요청을 기다리는 중이다. 클라이언트는 추가 요청을 하거나 이미 모든 요청을 완료한 경우 더 이상 보내지 않고 무시해도 되는 경우이다. |
101 | Switching Protocol | 클라이언트가 서버에 프로토콜 전환을 요청했고 서버는 이를 승인하는 중이다. |
102 | Processing | 서버가 요청을 수신하였고 이를 처리중이지만, 아직 제대로 된 응답을 알려줄 수 없음을 나타낸다. |
2xx (성공)
상태코드 | 내용 | 설명 |
200 | OK | 서버가 요청을 성공적으로 처리했음을 의미한다. (주로 GET 요청에 해당) |
201 | Created | 요청이 성공적으로 수행되었으며, 새로운 리소스가 생성됨을 의미한다. (주로 POST, PUT 요청에 해당) |
202 | Accepted | 요청은 접수되었지만, 처리는 완료되지 않음을 의미한다. 다른 프로세스에서 처리 / 서버가 요청을 다루고 있는 경우 / 배치 프로세스를 하고 있는 경우 를 위해 만들어졌다. |
203 | Non-Authoritative Information |
서버가 요청을 성공적으로 처리했지만, 다른 소스에서 수신된 정보를 제공하고 있다. 요청에 대한 검증이 되지 않음을 의미한다. |
204 | No Content | 서버가 요청을 성공적으로 처리했지만, 콘텐츠를 제공하지 않음을 의미한다. |
205 | Reset Content | 서버가 요청을 성공적으로 처리했지만, 콘텐츠를 표시하지 않음을 의미한다. 204 No Content 와 달리 요청자가 콘텐츠를 재설정할 것을 요구한다. |
206 | Partial Content | 서버가 GET 요청의 일부만 성공적으로 처리했음을 의미한다. |
207 | Multi-Status | 여러 소스에서 여러 응답인 상태에서 적절한 정보를 사용자에게 제공할 수 있도록 하는 응답코드이다. |
208 | Already Reported | DAV 바인딩 멤버는 이미 응답의 앞 부분에 열거되어 있으며 다시 포함되지 않음을 의미한다. |
3xx (리다이렉션 완료)
상태코드 | 내용 | 설명 |
300 | Multiple Choices | 요청에 대해 하나 이상의 리소스가 존재함을 의미한다. 서버가 사용자 에이전트에 따라 수행할 작업을 선택하거나, 요청자가 선택할 수 있는 작업 목록을 제공한다. |
301 | Moved Permanently | 요청한 리소스의 URI가 변경되었음을 의미한다. 요청한 페이지를 새 위치로 영구적으로 이동한다. GET 또는 HEAD 요청에 대해 해당 응답을 표시하면, 요청자가 자동으로 새 위치로 전달된다. |
302 | Found | 요청한 리소스의 URI가 일시적으로 변경되었음을 의미한다. 현재 서버가 다른 위치의 페이지로 요청에 응답하고 있지만, 향후 요청시 원래 위치를 계속 사용해야 한다. |
303 | See Other | 요청한 리소스를 다른 URI에서 GET 요청을 통해 얻어야 할 때의 응답이다. 서버가 사용자의 GET 요청을 처리하여 다른 URL에서 요청된 정보를 가져올 수 있도록 한다. |
304 | Not Modified | 리소스가 수정되지 않음을 의미한다. 해당 응답을 받을 경우, 클라이언트는 서버로부터 리소스 재전송을 받지 않고, 캐싱된 리소스를 사용한다. |
305 | Use Proxy | 프록시를 사용하여 요청한 페이지만 액세스 할 수 있다. 해당 응답은 요청자가 사용할 프록시를 가리키는 것이기도 한다. |
307 | Temporary Redirect | 302와 동일하게 일시적인 컨텐츠 이동을 나타낼 경우 사용되나, HTTP 메소드 변경을 허용하지 않는다. |
308 | Permanent Redirect | 301와 동일하게 영구적인 컨테츠 이동을 나타낼 경우 사용되나, HTTP 메소드의 변경을 허용하지 않는다. |
※ Redirection
1) 영구적인 리다이렉션 (301, 308)
- 301 : HTTP 메서드를 GET으로 바꾸고, body 없이 전송함
- 308 : 전송받은 HTTP 메서드를 유지하고, body도 유지하여 전송함
2) 일시적인 리다이렉션 (302, 307, 303)
- 302 : HTTP 메서드를 GET으로 바꾸고, body 없이 전송함
- 307 : 전송받은 HTTP 메서드를 유지하고, body도 유지하여 전송함
- 303 : HTTP 메서드를 GET으로 바꾸고, body 없이 전송함
→ 페이지 리프레시를 막기 위해 POST / PUT 뒤에 사용됨
3) 특수 리다이렉션 (300, 304)
- 300 : 본문의 HTML 페이지 내에 선택지가 나열되어 사용자가 선택 및 클릭 후 리다이렉트
- 304 : (오래된) 로컬에 캐시된 복사본으로 페이지를 리다이렉트
4xx (클라이언트 오류)
상태코드 | 내용 | 설명 |
400 | Bad Request | 요청 자체가 잘못되었을 경우 사용하는 코드이다. 잘못된 문법으로 인하여 서버가 요청을 이해할 수 없음을 의미한다. |
401 | Unauthorized | 인증이 필요한 리소스에 인증없이 접근한 경우 사용된다. 해당 응답코드는 브라우저에 어떤 인증 방식을 사용할 것인지 보내야 한다. 권한이 없는 경우 403을 이용해야 한다. |
403 | Forbidden | 서버가 요청을 거부하는 경우이다. 사용자가 리소스에 필요한 권한을 갖고 있지 않다. |
404 | Not Found | 서버가 요청한 페이지를 찾을 수 없는 경우 사용하는 코드이다. 서버에 존재하지 않는 페이지에 대한 요청이 있을 경우 해당 코드를 제공한다. |
405 | Method Not Allowed | PUT DELETE 등 서버에서 허용되지 않은 메소드로 요청할 경우 사용하는 코드이다. |
406 | Not Acceptable | 요청은 정상이지만, 서버에서 받아들일 수 없는 요청일시 사용하는 코드이다. 보통 웹 방화벽에 걸리는 경우 해당 코드가 반환된다. |
407 | Proxy Authentication Required |
프록시 인증이 필요한 경우 사용하는 코드이다. |
408 | Request Timeout | 요청 중 시간이 초과되었을 경우 사용하는 코드이다. 서버가 사용되지 않는 연결을 끊고 싶어하는 것을 의미하며, 일부 서버는 메시지를 보내지 않고 연결을 끊어버리기도 한다. |
409 | Conflict | 사용자의 요청이 서버의 상태와 충돌하여 응답하는 코드이다. |
410 | Gone | 단순히 찾는 리소스가 해당 부분에 없는 경우인 404와 달리 찾는 리소스가 영원히 사라진 경우 사용하는 코드이다. |
411 | Length Required | 서버에 요청시 Content-Lenght 값을 지정하지 않아 서버에서 응답을 거부할 때 사용하는 코드이다. |
412 | Precondition Failed | 클라이언트 헤더에 있는 전제조건이 해당 서버의 전제조건과 맞지 않는 경우 코드이다. |
413 | Payload Too Large | 요청 본문이 너무 긴 경우 응답하는 코드이다. 큰 첨부파일을 올릴 때 해당 코드가 발생하곤 한다. |
414 | URI Too Long | URI가 너무 길 때 발생하는 코드이다. |
415 | Unsupported Media Type |
사용자가 요청한 미디어타입이 서버에서 지원하지 않은 타입이어서, 응답을 거부할 때 상요하는 코드이다. |
416 | Requested Range Not Satisfiable |
요청 헤더의 Range로 지저한 범위가 잘못되었을 경우 사용하는 코드이다. |
429 | Too Many Request | 일정 시간 동안 너무 많은 요청을 보냈을 때, 이를 거부하기 위해 사용되는 코드이다. |
431 | Request Header Fields Too Large |
요청한 헤더 값이 너무 커서 서버에서 처리하지 않음을 알려주는 응답 코드이다. |
5xx (서버 오류)
상태코드 | 내용 | 설명 |
500 | Internal Server Error | 서버에 오류가 발생해 작업을 수행할 수 없을 경우 사용되는 코드이다. |
501 | Not Implemented | 서버에 요청을 수행할 수 있는 기능이 없는 경우, 서버가 요청을 이행하는 데 필요한 기능을 지원하지 않는 경우 사용되는 코드이다. |
502 | Bad Gateway | 게이트웨이가 연결된 서버로부터 잘못된 응답을 받았을 경우 사용되는 코드이다. |
503 | Service Temporary Unavailable |
서비스를 일시적으로 사용할 수 없을 경우 사용되는 코드이다. (웹서버 과부하로 다운 등) |
504 | Gateway Timeout | 게이트웨이가 연결된 서버로부터 응답을 받을 수 없었을 경우 사용되는 코드이다. |
505 | HTTP Version Not Supported |
HTTP 버전을 서버가 처리할 수 없는 경우이다. |
506 | Variant Also Negotiates | 서버 내부 구성(값)에 오류가 있어 반환되는 값에 컨텐츠 협상이 순환 참조로 이루어져 있다는걸 알려주는 코드이다. |
507 | Insufficient Storage | 서버 내부 구성(값)에 오류가 있어 선택된 가변 리소스는 투명한 콘텐츠 협상에 참여하도록 구성되므로 협상 과정에서 적절한 끝점이 아님을 알려주는 코드이다. |
510 | Not Extended | 서버가 요청을 처리할때 요청에 대한 추가 확장이 필요한경우 뜨는 응답코드이다. |
511 | Network Authentication Required |
사용자가 네트워크 엑세스 권한이 필요한 경우 뜨는 응답코드이다. 주로 네트워크에 엑세스 할 때 로그인이 필요한 경우 사용된다. |
[참조]
https://www.whatap.io/ko/blog/40/
https://ko.wikipedia.org/wiki/HTTP_상태_코드
https://velog.io/@sangyeon217/http-status-code
https://developer.mozilla.org/ko/docs/Web/HTTP/Redirections#attr2
'IT 기술' 카테고리의 다른 글
[MySQL] 최신 PK 값 가져오기 - last_insert_id() (0) | 2023.02.22 |
---|---|
[Spring] ResponseEntity<T> 로 응답 구성하기 (0) | 2023.02.20 |
[Kafka] 아파치 카프카에 대한 이해 (0) | 2022.05.21 |
REST API에 대한 이해 (0) | 2022.04.29 |
클라우드 강의 노트 (0) | 2022.02.23 |
Comments