티스토리 뷰
개요
프로젝트 하던 중 HTTP Status code를 다루게 되어 정리 겸 찾아보게 되었다.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
내용
HTTP Response Status Code 란?
클라이언트가 서버에게 요청을 보낼 때 그 요청의 결과가 어떻게 되었는지를 알려주는 숫자로 된 코드이다.
총 5가지의 종류로 그룹화 되어있다.
- 정보 응답 (1xx)
- 성공적인 응답 (2xx)
- 리다이렉션 메시지 (3xx)
- 클라이언트 오류 응답 (4xx)
- 서버 오류 응답 (5xx)
정보 응답 (1xx)
요청을 받았으며 계속 작업을 할 때 사용하는 코드
- 100 - Continue (계속)
- 클라이언트가 요청을 계속하거나 요청이 이미 완료되어 응답을 무시해야하는 경우
- 101 - Switching Protocols (프로토콜 전환)
- 서버에 프로토콜 전환을 요청했으며 서버는 이를 승인하는 중에 사용.
- Upgrade 코드는 클라이언트 요청 헤더에 대한 응답으로 전송되며 서버가 전환하는 프로토콜을 나타냄
- Upgrade는 이미 설정된 클라이언트/서버 연결을 다른 프로토콜로 업그레이드 하는데 사용됨. (HTTP 1.1전용)
- 102 - Processing (처리)
- 서버가 요청을 수신하여 처리중이지만 아직 사용할 수 있는 응답이 없음.
- 103 - Early Hints
- 주로 헤더와 함께 사용되어 서버가 응답을 준비하는 동안 Link 사용자 에이전트가 리소스 사전 다운로드 시작할 수 있도록 함.
- HTTP Link 엔티티 헤더 필드는 HTTP 헤더에서 하나 이상의 Link를 직렬화 하는 수단을 제공한다.
- 리소스 사전 다운로드 (rel)은 요소의 preload 속성 값을 사용하여 기본 렌더링 시작 전에 페이지에 필요할 리소스를 지정하여 HTML에서 가져오기 요청을 선언하는 것
성공적인 응답 (2xx)
클라이언트가 요청한 동작을 수신하여 이해했고 승낙했으며 처리했음을 가르킬 때 사용하는 코드
- 200 OK (성공)
- 요청이 성공했음을 의미하며 HTML 메서드에 따라 성공의 의미가 조금씩 달라진다.
- GET : 리소스를 가져와 메세지 본문에 전송하였다.
- HEAD : 메세지 본문 없이 응답에 표현 헤더가 포함된다.
- PUT & POST : API 요청 결과를 설명하는 리소스가 메세지 본문에 포함되어 전송된다.
- TRACE : 메세지 본문에는 서버에서 받은 요청 메세지가 포함된다.
- 요청이 성공했음을 의미하며 HTML 메서드에 따라 성공의 의미가 조금씩 달라진다.
- 201 Created (작성됨)
- 요청이 성공했고, 새 리소스가 생성되었음을 나타낸다.
- POST 요청 혹은 PUT 요청 후에 전송되는 응답.
- 202 Accepted (허용됨)
- 요청을 받았으나 아직 대응하지 않았다는 의미
- 요청 결과를 나타내는 비동기식 응답을 나중에 보내려는 방법이 없기 때문에 커밋되지 않는다.
- 다른 프로세스나 서버에서 요청을 처리하거나 일괄 처리를 하는 경우에 사용한다.
- 203 Non-Authoritative Information (신뢰할 수 없는 정보)
- 반환된 메타데이터가 원본 서버에서 사용 가능한 것과 정확히 동일하지 않으나 로컬 또는 타사 복사본에서 수집됨을 의미함.
- 특정 경우를 제외하고 200 보다 선호되는 응답이다.
- 204 No Content (콘텐츠 없음)
- 콘텐츠가 없으나 헤더가 유용한 경우에 사용한다.
- 사용자는 리소스에 대한 캐시된 헤더를 새 헤더로 업데이트 할 수 있다.
- 205 Reset content (컨텐츠 재설정)
- 이 요청을 보낸 문서를 재설정하도록 사용자에게 지시할 때 사용한다.
- 206 Partila content (일부 컨텐츠)
- 서버가 GET 일부만 성공적으로 처리했다는 의미이다.
- Reane 인 응답 코드는 리소스 일부만 요청하기 위해 클라이언트에서 헤더를 보낼 때 사용한다.
- Range 요청 헤더는 서버가 반환해야 하는 문서의 일부를 나타낸다.
- 207 Multi-Status (다중 상태)
- 여러 상태 코드가 적절할 수 있는 상황에 대해 여러 리소스에 대한 정보를 전달할 때 사용한다.
- 208 Already Reported (이미 보고됨)
- <dev:propstat> 와 동일한 컬렉션에 대한 여러 바인딩의 내부 멤버를 반복적으로 열거하지 않도록 응답 요소 내에서 사용한다.
- 226 IM Used (HTTP 델타 인코딩)
- 서버가 GET 리소스에 대한 요청을 이행했으며 응답은 현재 인스턴스에 적용된 하나 이상의 인스턴스 조작 결과를 나타낸다.
리다이렉션 메세지 (3xx)
클라이언트는 요청을 마치기 위해 추가 동작을 취해야 할 때 사용하는 코드
- 300 Multiple Choices (여러 선택 항목)
- 요청에 가능한 응답이 두 개 이상 있을 경우 사용하고 사용자는 둘 중 하나를 선택해야 한다.
- 응답 중 하나를 선택하는 표준화된 방법은 없다.
- 사용자가 선택할 수 있도록 작업 목록을 제공해야 한다.
- 301 Moved Permanently (영구 이동)
- 요청한 리소스의 URL이 영구적으로 변경되었을 때 사용한다.
- GET 또는 HEAD 요청에 대한 응답으로 이 응답을 표시하면 요청자가 자동으로 새 위치에 전달된다.
- 302 Found (임시 이동)
- 요청한 리소스의 URL이 일시적으로 변경되었음을 의미한다.
- 현재 서버가 다른 위치의 페이지로 요청에 응답하고 있으나 향후 요청시 원래 위치를 사용해야 한다..
- 요청한 리소스의 URL이 일시적으로 변경되었음을 의미한다.
- 303 See Other (기타 위치 보기)
- 서버는 GET 요청으로 다른 URL에 요청된 리소스를 가져오도록 클라이언트에게 지시할 때 사용한다.
- HEAD 요청 이외의 모든 요청을 다른 위치로 자동으로 전달한다.
- 304 Not Modified (수정되지 않음)
- 캐싱 목적으로 사용된다.
- 마지막 요청 이후 페이지가 수정되지 않았음을 클라이언트에 알리므로 클라이언트는 동일한 캐시 버전의 응답을 계속 사용할 수 있다.
- 마지막으로 페이지를 요청 후 페이지 변경이 없다면 응답 (If-Modified-Since HTTP 헤더) 을 표시하도록 서버를 구성해야한다.
- 305 Use Proxy (프록시 사용)
- 프록시를 사용하여 요청한 페이지만 액세스 할 수 있을 때 사용한다.
- 요청된 응답이 프록시에 의해 액세스되어야 함을 나타내기 위해 HTML 사양의 이전 버전에서 정의되었다.
- 프록시 인밴트 구성과 관련된 보안 문제로 인해 더 이상 사용되지 않는다.
- 306 Unused
- HTTP/1.1 사양에서 사용된 응답 코드로 현재는 사용되지 않는다.
- 307 Temporary Redirect (임시 리다이렉션)
- 현재 서버가 다른 위치의 페이지로 요청에 응답하고 있으나 요청자는 향후 요청 시 원래 위치를 계속 사용해야 할 때 사용한다.
- 서버는 이전에 요청에서 사용된 것과 동일한 메서드를 사용하여 다른 URI에서 요청된 리소스를 가져오도록 클라이언트에게 지시할 때 사용한다.
- 사용된 HTTP 메서드를 사용자가 변경해서는 안 된다는 점을 제외하면 HTTP 응답 코드와 동일한 의미를 가진다.
- 308 Premanent Redirect (영구 리다이렉션)
- 자원이 Location:Http 응답 헤더에 지정된 다른 URI에 영구적으로 위치함을 의미한다.
- 307과 동일하게 사용자가 HTTP 메서드를 변경하면 안된다는 점을 제외하면 HTTP 응답 코드와 동일한 의미이다.
클라이언트 오류 응답 (4xx)
클라이언트에 오류가 있을 때 사용하는 코드
- 400 Bad Request (잘못된 요청)
- 클라이언트 오류로 인식되는 것으로 인해 요청을 처리할 수 없거나 처리할 수 없을 경우 사용한다.
- 예시로 잘못된 요청 구문, 잘못된 요청 메세지 프레이밍 또는 사기성 요청 라우팅가 존재한다.
- 클라이언트 오류로 인식되는 것으로 인해 요청을 처리할 수 없거나 처리할 수 없을 경우 사용한다.
- 401 Unauthorized ( 권한 없음)
- 요청시 인증이 필요할 경우에 사용되며 서버는 로그인에 필요한 페이지를 제공할 수 있다.
- 클라이언트는 요청된 응답을 얻기 위해 자신을 인증해야 한다.
- 402 Payment Required (결제 필요)
- 결제를 해야만 접근할 수 있을 경우 사용한다.
- 초기 목적은 디지털 결제 시스템에 사용하는 것이었으나 현재 거의 사용되지 않고 표준 규칙이 존재하지 않는다.
- 403 Forbidden (금지됨)
- 클라이언트는 콘텐츠의 대한 액세스 권한이 없을 때 사용한다. (서버에서 요청 거부)
- 권한이 없기에 서버가 요청된 리소스 제공을 거부한다.
- 401과 달리 클라이언트의 ID는 서버에서 알고 있다.
- 404 Not Found (찾을 수 없음)
- 서버가 요청한 리소스(페이지)를 찾을 수 없을 때 사용한다.
- 브라우저에서 URL이 인식되지 않음을 의미하며 API에서는 엔드포인트는 유효하나 리소스 자체가 존재하지 않음을 의미할 수도 있다.
- 웹에서 자주 발생하기 때문에 가장 잘 알려져 있는 코드이다.
- 405 Method Not Allowed (허용되지 않은 메서드)
- 요청에 지정된 방법을 사용할 수 없을 때 사용된다.
- 예시로 POST 방식으로 요청 받는 서버에 GET 요청을 보내는 경우, 읽기 전용 리소스에 PUT 요청을 보낸 경우가 있다.
- 요청에 지정된 방법을 사용할 수 없을 때 사용된다.
- 406 Not Acceptable (허용되지 않음)
- 요청한 페이지가 요청한 콘텐츠 특성으로 응답할 수 없을 때 사용된다.
- 웹 서버가 서버 기반 콘텐츠 협상을 수행 후 사용자 에이전트가 지정한 기준을 준수하는 콘텐츠를 찾지 못할 때 사용된다.
- 407 Proxy Authentication Required (프록시 인증 필요)
- 401 프록시와 유사하지만 사용자가 프록시를 사용하여 인증이 필요할 때 사용된다.
- 서버에서 이 응답을 표시한다면 사용자가 사용할 프록시를 가르키는 것이기도 하다.
- 408 Request Timeout (요청 시간 초과)
- 서버의 요청 대기 시간이 초과하였을 때 사용한다.
- Chrome, Firefox 28+, IE9과 같은 일부 브라우저가 서핑 속도를 높이기 위해 사용하는 HTTP 사전 연결 매커니즘으로 인해 많이 사용된다.
- 409 Conflict (충돌)
- 서버가 요청을 수행하는 동안 충돌이 발생할 때 사용된다.
- 서버는 응답할 때 충돌에 대한 정보를 표시해야하며, PUT 요청과 충돌하는 PUT 요청에 대한 응답으로 이 코드를 요청 간 차이점과 함께 목록을 함께 표시해야 한다.
- 410 Gone (사라짐)
- 요청한 콘텐츠가 전달 주소 없이 서버에서 영구적으로 삭제되었을 때 전송된다.
- 404와 비슷하며 이전엔 있었으나 더 이상 존재하지 않는 리소스에 대신 404를 사용하기도 한다.
- 리소스가 영구적으로 이동된 경우 301을 사용하여 리소스의 새 위치를 지정해야 한다.
- 411 Length Required (길이 필요)
- Content-Length 헤더 필드가 정의되지 않거나 유효하지 않을 시 서버에서 요청 거부 할 때 사용된다.
- 412 Precondition Failed (사전 조건 실패)
- 클라이언트는 서버가 충족하지 않은 전제 조건을 헤더에 표시할 때 사용된다.
- 예시로 사용자의 요청이 서버가 지정한 사전 조건을 만족하지 않는 경우가 있다.
- 413 Payload Too Large ( 요청 속성이 너무 큼)
- 요청이 서버에서 정의한 제한보다 클 때 사용된다.
- 이런 경우 서버는 연결을 끊거나 Retry-After 헤더 필드를 반환할 수 있다.
- 414 URI Too Long (요청 URI가 너무 김)
- 요청된 URI가 서버가 해석할 수 있는 범위를 초과했을 때 사용된다.
- 415 Unsupported Media Type (지원되지 않는 미디어 유형)
- 요청한 데이터의 미디어 형식이 서버에서 지원되지 않아 요청을 거부하는 경우에 사용된다.
- 416 Range Not Satisfiable (처리할 수 없는 요청 범위)
- Range 요청의 헤더 필드에 지정된 범위를 충족할 수 없을 때 사용된다.
- 범위가 대상 URI의 데이터 크기를 벗어날 수 있다.
- 417 Expectation Failed (예상 실패)
- Expect 요청 헤더의 요구사항을 서버에서 충족할 수 없음을 의미할 때 사용한다.
- 418 I'm a teapot
- 서버가 어떤 시도에 대해 추출 거부할 때 찻주전자와 커피를 비교할 때 사용된다.
- 해당 에러는 https://www.google.com/teapot 을 들어가면 볼 수 있다.
- 421 Misdirected Request
- 요청이 응답을 생성할 수 없는 서버로 지정되었을 때 사용된다.
- 요청 URI에 포함된 체계와 권한의 조합에 대한 응답을 생성하도록 구성되지 않는 서버에 보낼 수 있다.
- 422 Unprocessable Content (처리할 수 없는 엔티티)
- 요청이 잘 되었으나 의미적인 오류가 생겼을 때 사용한다.
- 423 Locked (잠금)
- 액세스 중인 리소스가 잠겨있을 때 사용한다.
- 424 Failed Dependency
- 이전 요청 실패로 인해 요청이 실패할 때 사용된다.
- 425 Too Early
- 서버가 살릴 수 있는 요청을 처리하는 위험을 감수하지 않음을 알릴 때 사용된다.
- 426 Upgrade Required (업그레이드 필요)
- 클라이언트가 업그레이드 헤더 필드에 주어진 프로토콜로 요청을 보내야 할 때 사용된다.
- 현재 프로토콜을 사용하여 요청 수행을 거부하지만 클라이언트가 다른 프로토콜로 업데이트 후 요청한다면 서버는 요청을 수행힌다.
- 428 Precondition Required (전제 조건 필요)
- 원본 서버 요청이 조건적일 때 사용한다.
- 업데이트 손실 문제를 방지하기 위해 있는 코드이다.
- GET 리소스의 상태를 클라이언트가 수정하고 PUT 서버로 보내는 동안 제 3자에 의해 서버 상태가 수정되어 충돌을 일으키는 경우에 사용된다.
- 429 Too Many Requests(너무 많은 요청)
- 사용자가 주어진 시간 동안 너무 많은 요청을 보낼 때 사용한다.
- 431 Request Header Filelds Too Large (요청 헤더가 너무 큼)
- 헤더 필드가 너무 커서 서버에서 요청을 처리하지 않을 때 사용한다.
- 요청 헤더 필드의 크기를 줄인 후 다시 제출해야 정상 작동된다.
- 451 Unavailable For Legal Reasons (법적인 이유로 사용 불가)
- 사용자가 정부에서 검열한 웹 페이지와 같이 법적으로 제공할 수 없는 리소스를 요청할 때 사용한다.
서버 오류 응답 (5xx)
서버가 유효한 요청을 수행하지 못했을 때 사용하는 코드
- 500 Internal Server Error (내부 서버 오류)
- 서버에서 처리 방법을 알 수 없는 상황이 발생했을 때 사용된다.
- 501 Not Implemented (구현되지 않음)
- 요청 방법이 서버에서 지원되지 않아 처리할 수 없을 때 사용된다.
- 예를 들어 서버가 요청 메소드를 인식하지 못하는 경우 등이 있다.
- 요청 방법이 서버에서 지원되지 않아 처리할 수 없을 때 사용된다.
- 502 Bad Gateway (불량 게이트웨이)
- 서버가 용청을 처리할 때 필요한 응답을 얻기 위한 게이트웨이 역활을 하는 중 잘못된 응답을 받았음을 의미한다.
- 503 service Unavaliable (서비스를 시작할 수 없음)
- 서버가 요청을 처리할 준비가 되지 않았을 때 사용된다.
- 서버가 오버로드 된 경우, 유지관리를 위해 서버를 닫은 경우 등이 예시로 존재한다.
- 504 Gateway Timeout (게이트웨이 시간 초과)
- 서버가 게이트웨이나 프록시 역활을 하고 있거나 또는 업스트림 서비스에서 요청을 받지 못했을 때 사용된다.
- 505 HTTP Version Not Supported (HTTP 버전이 지원되지 않음)
- 요청에 사용된 HTTP 버전이 서버에서 지원되지 않을 때 사용된다.
- 506 Variant Also Negotiates
- 서버 내부 구성에 오류가 있을 때 사용된다.
- 507 Insufficient Storyage(용량 부족)
- 서버가 요청을 성공적으로 완료하는데 필요한 데이터를 저장할 수 없어 리소스에서 메서드를 수행할 수 없을 때 사용된다.
- 508 Loop Detected (루프 감지됨)
- 요청을 처리하는 동안 서버에서 무한 루프를 감지했을 때 사용된다.
- 510 Not Extended (확장되지 않음)
- 서버가 요청을 이행하려면 요청에 대한 추가 확장이 필요할 때 사용한다.
- 511 Network Authentication Required (네트워크 인증 필요)
- 클라이언트가 네트워크 액세스 권한을 얻기 위해 인증해야 함을 나타낸다.
결론
필요에 따라 상태 코드를 사용해야하며, 몇몇의 코드는 브라우저에 대한 호환성을 제공하지 않으니 잘 알아보고 써야할 것 같다.
'새롭게 시작하는 개발 이야기' 카테고리의 다른 글
디자인 패턴 - 4월 27일 스터디 발표 (0) | 2023.04.27 |
---|---|
JavaScript의 Event - 4월 6일 발표 (0) | 2023.04.06 |
서버사이드 렌더링과 클라이언트 사이드 렌더링 - 3월 23일 스터디 발표 (0) | 2023.03.23 |
javascript와 단일 쓰레드의 관계 - 3월 15일 스터디 발표. (2) | 2023.03.15 |
Browser Rendering 과정 - 3월 9일 스터디 발표 (0) | 2023.03.09 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- graphQL
- 개발
- JAR
- 인텔리J
- 일지
- body
- JavaScript
- Spring
- 프로그래머스
- 스터디 회고
- Request Handler
- 모듈
- spring-boot
- 멀티모듈
- RequestHandler
- Gradle
- 회고
- homebrew
- 한 입 크기로 잘라먹는 리액트
- Spring Boot
- springboot
- @Autowired
- header
- MySQL
- Java
- 개발일지
- 자바스크립트
- web
- HTTP
- mapping
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함