4장 결과를 전달하는 HTTP 상태 코드
클라이언트가 HTTP 리퀘스트를 보낸 결과, 즉 서버가 정상적으로 처리되었는지 아니면 에러가 발생했는지를 알려주는게 HTTP 상태 코드다.
4.1 상태 코드는 서버로부터 리퀘스트 결과를 전달한다.
클라이언트가 서버를 향해 리퀘스트를 보낼 때 서버에서 그 결과가 어떻게 되었는지 알려주는 것이 상태 코드의 역할이다. 정상적으로 처리했는지 에러였는지 알 수 있다.
200 OK와 같이 3자리 숫자와 설명으로 나타낸다.
- 1xx(Informational): 리퀘스트를 받아들여 처리중
- 2xx(Success): 리퀘스트를 정상적으로 처리했음
- 3xx(Redirection): 리퀘스트를 완료하기 위해서 추가 동작이 필요
- 4xx(Client Error): 서버는 리퀘스트 이해 불가능
- 5xx(Server Error): 서버는 리퀘스트 처리 실패
클래스 정의만 잘 지킨다면 RFC2616에서 정의된 상태 코드를 변경하거나 서버 독자의 상태 코드를 만들어도 상관없다.
4.2 2XX 성공(Success)
2xx 리스폰스는 리퀘스트가 정상으로 처리되었음을 나타낸다.
4.2.1 200 OK
클라이언트가 보낸 리퀘스트를 서버가 정장 처리하였음을 나타낸다.
리스폰스에서 상태 코드와 함께 되돌아 오는 정보는 메소드에 따라 다르다.
GET 메소드의 경우 리퀘스트된 리소스에 대응하는 엔티티가 리스폰스로 보내지고 HEAD 메소드의 경우에는 리퀘스트된 리소스에 대응하는 헤더 필드가 메시지 바디를 동반하지 않고 리스폰스로 되돌아온다.
4.2.2 204 No Content
리퀘스트는 성공했으나 리스폰스에 엔티티 바디를 포함하지 않는 경우를 나타낸다.
클라이언트에서 서버에 정보를 보내기만 할 때 사용한다.
4.2.3 206 Partial Content
Range에 의해서 범위가 지정된 리퀘스트에 의해서 서버가 부분적 GET 리퀘스트를 받았음을 나타낸다.
리스폰스에는 Content-Range로 지정된 범위의 엔티티가 포함되게 된다.
4.3 3xx 리다이렉트(Redirection)
3xx 리스폰스에는 리퀘스트가 정상적으로 처리를 종료하기 위해 브라우저 측에서 특별한 처리를 수행해야 함을 나타낸다.
4.3.1 301 Moved Permanently
리퀘스트된 리소스에는 새로운 URI가 부여되어 있기 때문에 이후로는 그 리소스를 참조하는 URI를 사용해야 한다는 것을 나타낸다.
Location 헤더 필드에서 가리키고 있는 URI를 사용하라고 권장한다.
4.3.2 302 Found
리퀘스트된 리소스에는 새로운 URI가 할당되어 있기 때문에 그 URI를 참조해 주길 바란다는 의미다.
301과 비슷하지만 302의 경우에는 영구적이 아닌 일시적인 이동이다. 이동하는 곳의 URI는 앞으로 이동될 가능성이 있다.
4.3.3 303 See Other
이 리스폰스는 리퀘스트에 대한 리소스는 다른 URI에 있기 때문에 GET 메소드를 사용해서 얻어야 한다는 것을 나타낸다. 302와 같은 기능이지만 리다이렉트 장소를 GET 메소드로 얻어야 한다고 명확하게 되어 있는 점이 다르다.
301, 302, 303 리스폰스 코드가 되돌아오면, 대부분의 브라우저에서는 PORT를 GET으로 바꾸어서 리퀘스트의 엔티티 바디를 삭제하고 리퀘스트를 자동적으로 재송신하도록 되어있다.
4.3.4 304 Not Modified
이 리스폰스는 클라이언트가 조건부 리퀘스트를 했을 때 리소스에 대한 액세스는 허락하지만, 조건이 충족되지 않음을 표시한다. 304는 리스폰스 바디에 어떤 것도 포함되어 있어서는 안된다.
4.3.5 307 Temporary Redirect
이 리스폰스는 302와 같은 의미를 지니지만, 302의 경우에는 POST로 부터 GET으로 치환이 금지되어 있지만 브라우저에서는 그렇게 되어 있다. 307에서는 브라우저 사양에 따라 POST에서 GET으로 치환을 하지 않는다.
4.4 4XX 클라이언트 에러(Client Error)
4xx 리스폰스는 클라이언트의 원인으로 에러가 발생했음을 나타낸다.
4.4.1 400 Bad Request
이 리스폰스는 리퀘스트 구문이 잘못되었음을 나타내고 있다.
브라우저는 이것을 200 OK와 같이 취급한다.
4.4.2 401 Unauthorized
이 리스폰스는 송신한 리퀘스트에 HTTP 인증 정보가 필요하나는 것을 나타내고 있다. 또한, 이미 1번 리퀘스트가 이루어진 경우에는 유저 인증에 실패했음을 표시한다.
4.4.3 403 Forbidden
이 리스폰스는 리퀘스트된 리소스의 액세스가 거부되었음을 나타낸다.
서버 측은 거부의 이유를 분명히 할 필요가 있고 이유를 명확하게 하는 경우에는 엔티티 바디에 기재해서 유저 측에 표시한다.
4.4.4 404 Not Found
이 리스폰스는 리퀘스트한 리소스가 서버상에 없단느 것을 나타내고 있다.
4.5 5xx 서버 에러(Server Error)
5xx 리스폰스는 서버 원인으로 에러가 발생하고 있음을 나타낸다.
4.5.1 500 Internal Server Error
이 리스폰스는 서버에서 리퀘스트를 처리하는 도중에 에러가 발생하였음을 나타낸다.
4.5.2 503 Service Unavailable
이 리스폰스는 일시적으로 서버가 과부하 상태이거나 점검중이기 때문에 현재 리퀘스트를 처리할 수 없음을 나타내고 있다.
'TIL > 개발' 카테고리의 다른 글
그림으로 배우는 Http & Network Basic - 5장 (0) | 2023.12.25 |
---|---|
[리팩토링 2판 스터디] 3회차 정리 (0) | 2023.12.16 |
그림으로 배우는 Http & Network Basic - 3장 (0) | 2023.12.15 |
Partial Prerendering(PPR)은 어떤 렌더링 방식일까? (0) | 2023.12.10 |
그림으로 배우는 Http & Network Basic - 2장 (0) | 2023.12.06 |