반응형

Chapter 11. 리다이렉트를 피하라.


 리다이렉트를 사용자를 한 URL에서 다른 URL로 다시 보내는 것을 말한다. HTML문서 모두 요청하기도 하며, 페이지 안에서 구성요소를 요청할 때도 사용된다. 그리고 리다이렉트를 사용하는 이유는 다양하다. 리다이렉트에 대해 기억해 두어야 할 중요한 점은 리다이렉트는 페이지를 더 느리게 만든다는 점이다.


1. 리다이렉트 타입.

 웹 서버가 브라우저로 리다이렉트를 반환할 경우 그 응답은 3xx 범위의 상태 코드를 갖게 된다. 이 값은 HTTP 요청을 완수하기 위해서는 user agent 가 추가적으로 무언가를 해야 한다는 것을 나타낸다. 301,302 가 주로 사용되며 307까지 정의되어 있다. meta tag 나 document.location을 이용하여 리다이렉트 할 수 있으며, 리다이렉트를 꼭 해야 한다면 HTTP 의 3xx 상태 코드를 이용하여 처리하는 방법을 추천한다.(뒤로가기 버튼의 비활성화를 위해서-)

 - Use standard redirects : http://www.w3.org/QA/Tips/reback

 - php 의 경우 header 로 처리하면 됨.


2. 리다이렉트가 성능에 미치는 영향.

 리다이렉트가 완료되고 HTML 문서가 다운로드되기 전까지는 브라우저 화면에 아무것도 보이지 않는다. 리다이렉트를 HTML 문서 자체의 다운로드를 지연시키기 때문에 가장 안 좋다고 할 수 있다.


3. 리다이렉트의 대안.

ㄱ. 주소 뒤에 슬래시(/)를 빼는 것.

 웹 사이트에 여러 하위 디렉토리가 있고 오토인덱싱 기능을 이용한다면 웹 사이트 사용자가 원하는 페이지로 이동하기 위해 리다이렉트를  거칠 가능성이 높다고 할 수 있다. 아파치 등의 웹서버에서 리다이렉트를 피하려면 Alias로 상대주소를 사용하면 된다.


ㄴ. 웹 사이트 연결.

 Alias, mod_rewrite, DirectorySlash 는 URL 안에 추가적으로 핸들러나 파일 이름과 같은 항목이 필요하지만 간단하게 구현할 수 있다. 도메인 이름이 다르다면 CNAME을 이용해서 두 개의 호스트 이름을 하나의 같은 서버로 보낼 수 있다.


ㄷ. 내부 트래픽 추적.

리다이렉트를 이용하여 트래픽 추적을 했던 부분을 REFERER 로그를 이용하여 바꿀 수 있다. 이를 이용해서 리다이렉트를 피할 수 있고, 응답시간을 개선할 수 있다. 같은 사이트 안에서 리다이렉트 대신 REFERER 로그를 이용하는 것은 내부 트래픽을 위해서 또 사용자 응답 시간을 개선하기 위해서 시간을 들일 가치가 있는 작업이다.


ㄹ. 외부 트래픽 분석.

 사용자 트래픽을 분석할 경우, 웹 사이트 외부로 링크가 되었을 수도 있을 것이다. 이 상황에서 REFERER 를 이용하는 것은 실용적이지 못하다. 그래서 외부트래픽을 분석할 때 리다이렉트의 대안은 비콘(beacon)을 이용하는 것이다. 비콘을 사용할 때 어려운 점은 다른 페이지로 이동하려는 도중에 비콘의 요청을 보냄으로써 race condition 에 빠질 수 있다는 점이다. onload, XMLHttpRequest 를 사용하기도 하지만 target 속성을 활용하면 race condition 은 피할 수 있을 것이다.


ㅁ. 더 산뜻한 URL.

 리다이렉트 없이 좀 더 간단한 URL을 만드는 방법을 찾아야 한다. 사용자에게 추가적인 HTTP 요청을 보내게 하는 것보다 Alias, mod_rewrite, DirectorySlash 그리고 직접적인 링크코드를 이용해서 추가적인 리다이렉트를 피하는 것이 좋다.


리다이렉트를 피할 수 있는 방법을 찾아라.


반응형

+ Recent posts