웹 서버 구현기 1-4 HTTP 메시지: 상태코드 300-399

Plato·2023년 6월 5일
0

웹서버 구현기

목록 보기
5/11

서론

이번 글에서는 리다이렉션 상태 코드, 클라이언트 에러 상태 코드 그리고 서버 에러 상태 코드를 살펴보자.

본론

리다이렉션 상태 코드: 300-399

리다이렉션 상태 코드는 클라이언트가 요청한 자원이 위치한 곳을 알려줄 때 사용한다.

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

마무리

에러 상태 코드는 꽤 직관적이기에 다루지 않기로 했다. 다음 글에서는 소켓을 생성하는 방법에 대해 다뤄보자.

0개의 댓글