본문 바로가기
📌 Computer Science/└ 네트워크

[Web] HTTP Referer 헤더 정보 (Request Headers Referer(리퍼러)) 이해하기

by 쫄리_ 2023. 3. 10.
728x90
반응형

● HTTP header - referer(레퍼러) 란?
http 헤더 중 하나인 레퍼러 또는 리퍼러는
리퍼러를 참조함으로써 현재 표시하는 웹페이지가 어떤 웹페이지에서 요청되었는지 알 수 있으며,
어떤 웹사이트나 웹서버에서 방문자가 왔는지를 파악할 수 있는 기능을 레퍼러를 통해 할 수 있다.

HTTP 프로토콜에는 referer 라는 헤더값이 있는데, 브라우저가 서버로 이 헤더값을 설정해서 보내게 된다.
그리고 서버는 referer를 참조함으로써 "현재 표시하는 웹페이지가 어떤 웹페이지에서 요청" 되었는지 알 수 있으며,
어떤 웹사이트나 웹서버에서 방문자가 왔는지를 파악할 수 있는 기능을 referer 를 통해 할 수 있다.


○ 구체적 설명
[ http://www.sohyun.com/1.html ] 이라는 웹페이지에 있는 링크를 클릭하여
[ http://www.sohyun.com/2.html ] 으로 이동했을 때
▶ 리퍼러는 [ http://www.sohyun.com/1.html ] 이 된다.

좀 더 구체적으로 말하자면,
리퍼러는 [ http://www.sohyun.com/1.html ] 의 링크가 걸린 아이템이 존재하는 URL 이다.

간단하게 말하자면,
헤더에 담겨있는 현재 페이지에 요청한 이전 페이지의 uri 정보 정도로 보면 된다.
HTTP 헤더에는 User-Agent, Host, Origin 여러 정보들이 들어있는데,
서버에서 '프로토콜://호스트:포트/경로?쿼리스트링' 으로 되어있는
전체 경로 즉, "uri 정보를 알고 싶다면" 헤더의 Referer 를 참조하면 된다고 보면 된다.

대부분의 웹서버에는 이전 트래픽로그가 존재하며,
브라우저가 송신한 HTTP referer를 기록하고 있다.
많은 웹로그 분석 소프트는 이 정보를 처리 가능하다.

referer 정보는 유저의 프라이버시에 관계되는 경우가 있기 때문에,
referer 정보를 송신하지 않는 설정을 할 수 있는 브라우저도 있다.

프록시나 파이어월에도 리퍼러 정보를 필터링 할 수 있는 것도 있어
외부에 공개하고 싶지 않은 로케이션 정보를 유출되지 않도록 할 수 있다.

올바른 리퍼러 정보를 보내지 않으면 문제가 발생할 수도 있는데
웹서버는 자신의 페이지 중 일부 페이지에 올바른 리퍼러 정보를 송신하지 않는 브라우저에 대해
엑세스를 블록해 버리기도 한다. (이건 타 사이트 직접 링크나 이미지의 부정사용을 막기 위함이다.)

특히 성인사이트등의 유료사이트의 대부분은 자신들의 콘텐츠를 지키기 위해 리퍼러 정보를 이용하고 있다.
로그인 하지 않으면 열어 볼 수 없는 극소수의 페이지에서만 엑세스 허가를 한다.


● Referer 사용처
정리하자면 결국 referer의 값은 이 페이지를 요청한 이전 페이지가 무엇인지를 알려주는 정보이다.
그리고 이 referer는 보통 로그분석이나 접근제어를 할 때 이용한다.

로그분석을 할 때
"우리 사이트로의 유입이 어떤 검색서비스를 이용한 것인지 알고자" 할 때
바로 이 referer를 분석한다고 보면 된다.

이것이 일반적인 로그분석기 이다.

접근제어도 알고 보면 단순한 로직이다.
게시물을 저장할 때에는 그 전에 게시물을 쓰는 페이지에서 저장을 요청한다.
때문에 '저장' 페이지에서 referer값을 체크해서, '쓰기' 페이지가 referer값이 아니면 요청을 거부할 수 있다.

물론 이러한 방법은 아주 단순한 방법이기 때문에 완벽한 접근제어는 아니지만,
임시적으로 제어를 할 경우에는 간단하기 때문에 꽤 유용하게 이용될 수 있다.


● 코드에서 referer 데이터 얻기

  • 클라이언트
    if (document.referrer) {
    var myReferer = document.referrer;
    document.write(myReferer);
    }
728x90
반응형