상태 코드는 클라이언트가 서버를 향해 요청을 보낼 때 서버에서 그 결과가 어떻게 되었는지 알려준다. 예를 들면 200 OK와 같이 3자리 숫자와 설명으로 나타낸다.
숫자의 첫 번쨰 자리는 응답 클래스를 의미하는데 나머지 2자리는 분류가 없다. 이 응답 클래스는 다음과 같이 5개가 정의되어 있다.
클래스 | 설명 | |
---|---|---|
1xx | informational | 요청를 받아들여 처리중 |
2xx | Success | 요청를 정상적으로 처리함 |
3xx | Redirection | 요청을 완료하기 위해 추가 동작이 필요 |
4xx | Client Error | 서버가 요청을 이해 불가능 |
5xx | Server Error | 서버가 요청 처리 실패함 |
2xx 성공(Success)
2xx 응답은 요청이 정상적으로 처리되었음을 나타낸다.
202 OK
클라이언트가 보낸 요청을 서버가 정상 처리하였음을 나타냄.
204 No Content
이 응답은 서버가 요청을 받아서 처리하는 데는 성공했지만 응답에 엔티티 바이를 포함하지 않는다. 예를 들면 브라우저에 요청을 보낸 후 204 응답을 수신했어도 표시되어 있는 화면이 변하는 일은 없다.
이것은 클라이언트에서 서버에 정보를 보내는 것으로 족하고, 클라이언트에 새로운 정보를 보낼 필요가 없는 경우에 사용된다.
206 Partial Content
이 응답은 Range에 의해서 범위가 지정된 요청에 의해서 서버가 부분적으로 GET 요청을 받았음을 나타낸다. 응답에는 Content-Range로 지정된 범위의 엔티티가 포함되게 된다.
3xx 리다이렉트(Redirection)
3xx 응답은 요청이 정상적으로 처리를 종료하기 위해 브라우저 측에서 특별한 처리를 수행해야 함을 나타낸다.
301 Moved Permanently
이 응답은 요청된 리소스에는 새로운 URI가 부여되어 있기 때문에 이후로는 그 리소스를 참조하는 URI를 사용해야한다는 것을 나타내고 있다. 즉, 요청한 리소스가 Location 헤더에 주어진 URL로 완전히 옮겨졌다는 것을 나타낸다. 브라우저는 이 페이지로 리다이렉트하고, 검색 엔진은 해당 리소스로 연결되는 링크를 갱신한다
예를 들어 기존 웹사이트를 새로운 주소로 옮겼다고 해보자. 이 경우 예전 URL로 접속하면 새로운 주소로 이동하도록 리다이렉트 처리를 추가할 것이다. 301은 해당 URL이 새로운 URL로 영구 변경되었음을 나타낸다.
302 Found
이 응답은 요청된 리소스에 새로운 URI가 할당되어 있기 때문에 그 URI를 참조해 주길 바란다는 의미를 나타낸다.
301 Moved Permanently와 비슷하지만 302의 경우에는 영구적인 이동이 아닌 일시적인 것이다. 결국, 이동하는 곳의 URI는 앞으로 이동될 가능성이 있는 것이다.
간단히 말하면 301은 요청된 리소스가 영구적으로 이동 페이지로 이동되었다는 것이고 302는 요청된 리소스가 일시적으로 이동 페이지로 이동되었다는 것이다.
303 See Other
이 응답은 요청에 대한 리소스는 다른 URI에 있기 때문에 GET 메소드를 사용해서 얻어야 한다는 것을 나타낸다. 이것은 302 Found와 같은 기능이지만, 리다이렉트 장소를 GET 메소드로 얻어야 한다고 명확하게 되어 있는 점이 302와 다르다.
예를 들면 POST 메소드로 액세스한 CGI(Common Gateway Interface) 프로그램을 실행한 후 처리 결과를 별도의 URI에 GET 메소드로 리다이렉트 시키고 싶은 경우 등에 303이 사용되고 있다. 302 Found 라도 같은 일이 가능하지만 303을 사용하는 것이 바람직하다.
304 Not Modified
이 응답은 클라이언트가 조건부 요청을 했을 때 리소스에 대한 액세스는 허락하지만 조건이 충족되지 않음을 표시하고 있다. 304를 되돌려 줄 경우에는 응답 바디에 어떤 것도 포함되서는 안된다. (리다이렉트와는 관계 없다.)
307 Temporary Redirect
이 응답은 302 Found와 같은 의미를 지니지만 302의 경우에는 POST로부터 GET으로 치환이 금지외어 있는데도 불구하고 구현상 그와 같이 되어 있지는 않다. 하지만 307에서는 브라우저 사양에 따라 POST에서 GET으로 치환을 하지 않는다.
4xx 클라이언트 에러(Client Error)
4xx 응답은 클라이언트의 원인으로 에러가 발생했음을 나타낸다.
400 Bad Request
이 응답은 요청 구문이 잘못됨을 나타낸다. 이 에러가 발생하면 요청 내용을 재검토 후 재송신할 필요가 있다. 또한 브라우저는 200 OK와 같이 취급한다.
401 Unauthorized
이 응답은 송신한 요청에 HTTP 인증 정보가 필요하다는 것을 나타낸다.
401을 포함한 응답을 되돌리는 경우에는 요청된 리소스에 적용된 challenge를 포함한 WWW-Authenticate 헤더 필드를 포함할 필요가 있다.
브라우저에서 처음 401 응답을 받은 경우에는 인증을 위한 다이얼로그가 표시된다. 이후 이미 1번 요청이 이루어진 경우 유저 인증에 실패했음을 표시한다.
402 Forbidden
이 응답은 요청된 리소스의 액세스가 거부되었음을 나타낸다.
서버 측은 거부의 이유를 분명히 할 필요가 있는데 이유를 명확하게 하는 경우에는 엔티티 바디에 기재해서 유저 측에 표시한다.
예를 들어 파일 시스템의 permission이 부여되지 않은 경우와 액세스 권한에 문제가 있는 것 등이 있을 수 있다.
404 Not Found
이 응답은 요청한 리소스가 서버상에 없다는 것을 나타낸다. 그 외에도 서버 측에서 해당 요청을 그냥 거부하고 싶을 때도 이용할 수 있다.
5xx 서버 에러(Server Error)
5xx 응답은 서버 원인으로 에러가 발생하고 있음을 나타낸다.
500 Internal Server Error
이 응답은 서버에서 요청을 처리하는 도중 에러가 발생하였음을 나타낸다.
503 Service Unavailable
이 응답은 일시적으로 서버가 과부하 상태이거나 점검중이기 때문에 현재 요청을 처리 할 수 없음을 나타낸다.
이 상태가 해소되기까지 시간이 걸리는 경우에는 Retry-After 헤더 필드에 따라 클라이언트에 전달 하는 것이 바람직하다.
- Retry-After 헤더 필드 : 다음에 올 요청이 이루어지기 전에 사용자 에이전트가 대기해야 하는 시간을 가르킨다.
본 글은 "그림으로 배우는 Http&Network Basic"의 내용을 정리하였습니다
'Network' 카테고리의 다른 글
[웹 브라우저의 동작] 2. IP (0) | 2021.05.14 |
---|---|
[웹 브라우저의 동작] 1. HTTP (0) | 2021.05.12 |
HTTP 메시지 (0) | 2021.05.04 |
HTTP 프로토콜의 구조 (0) | 2021.05.02 |
웹과 네트워크의 기본 (0) | 2021.04.25 |