1 minute read

#해더에서 코드를 넘겨서 페이지를 강제 이동 시킬 깨 사용되는 http code를 알아보자.

#동작 User -> A URL -(redirect)-> B URL

  • 301 Moved Permanently
  • A URL은 영원히 B URL로 바뀌었다.
  • 이후 요청을 B URL로 하라.

  • 302 Found
  • A URL은 일시적으로 B URL로 바뀌었다.
  • Moved Temporarily
  • 일시적인 URL이동에 대한 처리용.
  • 이 코드는 살짝 문제가 있어서 303과 307 이 추가되었다.(HTTP 1.1 부터)

  • 303 See Other (HTTP 1.1)
  • GET으로 B URL로 이동
  • 요청이 들어오면 GET으로 B URL로 이동시킨다.
  • POST,PUT 으로 요청을 하였을 경우 넘겨준 데이터는 서버에서 받았다고 가정하고 B URL로 GET으로 이동한다.

  • 302와 거의 동일한 동작이다.
  • 몇몇 프레임워크들은 302대신 303이 사용한다.

  • 307 Temporary Redirect (HTTP 1.1)
  • A URL 요청 후 307 응답을 받았다면
    B URL로 똑같이 다시 요청하도록 한다.(GET,POST 등의 방식(HTTP method) 변경 불가. 그대로 똑같이 URL만 바꿔서 요청)
  • 302에서 이동시 POST로 할 경우도 GET으로 이동되서 데이터는 못 넘기는 문제를 피하기 위해서 만들어짐.

  • 308 Permanent Redirect (RFC 7538)
  • 301의 302 버전
    즉, 영원한 B URL 이동을 지원한다. 다만 GET,POST 등의 방식은 변경 못하고 그대로 똑같이 URL만 바꿔서 요청해야한다.

–=–

  • 영원히 페이지 이동
  • 301 : HTTP method 를 GET으로 이동
  • 308 : HTTP method 고정하고 데이터도 같이 포함해서 이동

  • 임시 이동
  • 302 , 303 : HTTP method 를 GET으로 이동
  • 307 : HTTP method 고정하고 데이터도 같이 포함해서 이동

–=–

  • 여기서 “이동”은 실질적으로 브라우저에서 해당 URL로 재호출하는 것이다.
  • 서버에서는 HTTP code만 알려준다. 나머지는 브라우저에서 알아서 처리해줘야한다.

  • PHP 5.5.36 에서 header 등에 308 사용시 에러 (수동으로 표기하면 된다.)
  • header(“HTTP/1.1 308 Permanent Redirect”,false);
  • header ( ‘Location: ‘.$url,true);

  • redirect 시 GET으로 이동될 경우 a URL 의 get값은 사라진다. b URL로 URL자체가 바뀌기 때문.

–=–

테스트하기


🔗original-link

Updated: