http code for redirect , URL 리다이렉트용 http code
#해더에서 코드를 넘겨서 페이지를 강제 이동 시킬 깨 사용되는 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자체가 바뀌기 때문.
–=–