이번 글에서는 리다이렉션 상태 코드, 클라이언트 에러 상태 코드 그리고 서버 에러 상태 코드를 살펴보자.
리다이렉션 상태 코드는 클라이언트가 요청한 자원이 위치한 곳을 알려줄 때 사용한다.
상태 코드 | 사유 구절 | 의미 |
---|---|---|
300 | Multiple Choices | 여러 리소스를 가리키는 URL을 통해 자원을 요청했다. 리소스의 목록과 함께 반환한다. 예시) 요청한 웹페이지가 일본어 버전과 한국어 버전이 존재하는 경우. 서버는 Location 헤더를 통해 선호하는 자원을 명시할 수 있다. |
301 | Moved Permanently | 자원의 URL이 변경됐다. 서버는 Location 헤더에 자원의 새로운 URL을 포함하여 응답 메시지를 보내야한다. |
302 | Found | 자원의 URL이 임시로 변경됐다. 301 상태 코드를 포함할 때와 동일하게, 서버는 Location 헤더에 새로운 URL을 넣어 보내야한다. URL이 임시로 변경된 것이기 때문에, 클라이언트는 이후에 동일한 자원을 요청할 때 이전 URL을 사용하여 요청해야한다. 원래 HTTP/1.0 명세에는, user agent가 재요청을 보낼 때 기존에 사용했던 메서드를 그대로 사용하도록 돼있다. 하지만 많은 웹 브라우저가 이를 지키지 않고, POST 요청을 보낸 뒤 재요청은 GET 메서드로 보내자, HTTP/1.1에서는 303과 307코드를 추가시켰다. HTTP/1.0 클라이언트에게 사용하기 위해 남겨져있는 상태 코드이고 이후의 클라이언트에게는 307 코드를 사용해야한다. |
303 | See Other | 302와 거의 동일하다. 차이점은, 303 코드를 사용하면 유저 에이전트가 재요청을 보낼 때 GET 메서드로 바꿔서 보내야한다는 것. |
304 | Not Modified | 클라이언트가 요청한 자원을 서버가 보낼 필요가 없다. 클라이언트가 If-None-Match 혹은 If-Modified-since 헤더를 포함하는 요청 메시지를 보냈을 때에만 사용가능한 상태 코드다. 이러한 헤더를 포함한 요청 메시지를 조건부 요청이라 일컫는다. 자세한 내용은 시리즈의 이후 글에서 다룰 것이다. |
305 | Use Proxy | 클라이언트가 요청한 자원은 프록시를 통해 요청해야한다. 서버는 클라이언트에게 305 상태 코드와 함께 프록시의 주소를 Location 헤더에 담아서 반환한다. 서버의 모든 자원을 요청할 때 프록시를 사용해야한다는 의미는 아니고 해당 자원을 요청할 때만 사용하면 된다는 의미. |
306 | 사용되지 않음. | |
307 | Temporary Redirect | 303과 거의 동일하다. 307 코드는 유저 에이전트가 재요청을 보낼 때 원래 요청의 메서드를 사용해야한다는 차이가 있다. |
에러 상태 코드는 꽤 직관적이기에 다루지 않기로 했다. 다음 글에서는 소켓을 생성하는 방법에 대해 다뤄보자.