리다이렉트(redirect) 에 대한 고찰과 개념정리
나는 단순히 웹서버에서의 리다이렉트(redirect)가 포워딩의 개념이외에는 크게 비중이 없는줄 알았다.(Apache 나 Nginx)
즉 프론트딴의 javascript 의 location 을 이용한다거나, html 문서상의 meta 태그의 url 이랑 크게 차이가 없는 줄 알았다.
하지만 이 두개의 차이는 HTTP 상태코드를 클라이언트에게 전달할수 있느냐/없느냐의 큰 차이가 있었다.
즉 웹서버의 리다이렉트는 클라이언트에게 상태코드를 전달하면서 리다이렉트를 하는데, 프론트딴에서의 javascript의 location이나, html문서의 meta 는 상태코드를 클라이언트에게 전달하지 못한다.
이 상태코드를 클라이언트에게 전달할수 있느냐/없느냐는 커다란 의미가 있다. 그것이 무엇이냐하면~
카카오톡이나 텔레그램을 통해 친구에게 url 을 전달하면, 이미지나 설명등등이 미리보기로 노출이 되는 경우를 볼 수 있을 것이다.
자 여기서 큰 차이점이 발생한다.
만일 상태코드를 클라이언트에게 전달하면서 리다이렉트를 한다면, 리다이렉트 되는 홈페이지의 이미지와 설명이 그대로 클라이언트에게 전달된다.
하지만 상태코드를 클라이언트에게 전달없이 리다이렉트를 한다면, 클라이언트에게 정보반영은 없다.
즉, 리다이렉트의 기본은 상태코드 전달이 중요한 부분을 차지할수 있는 것이다.
비단 웹서버에서의 뿐만 아니라 백엔드딴에서도 상태코드 전달과 함께 리다이렉트가 가능한다.
가령 php 의 경우 아래처럼 가능하다.
// 301 Moved Permanently 상태 코드 설정
header('HTTP/1.1 301 Moved Permanently');
// 리다이렉트할 URL 설정
header('Location: https://naver.com');
위 header 코드는 상태코드 전달과 함께 리다이렉트를 동시에 수행한다.