Referer
사용법
Referer 헤더는 클라이언트(브라우저, HTTP 라이브러리)가 요청한 리소스로 연결되는 페이지나 리소스의 URL을 알리기 위해 전송합니다. 사용자가 https://example.re/page 의 링크를 클릭하면, 브라우저는 뒤따르는 요청의 Referer 헤더에 링크를 건 페이지의 주소를 담아 보냅니다.
참고
헤더 이름 “Referer”는 영어 단어 “referrer”의 역사적인 철자 오류입니다. 최초의 HTTP 명세가 이 오타를 도입했고, 지금 와서 철자를 바로잡으면 기존 구현이 망가집니다. 철자가 틀린 형태가 여전히 공식 헤더 이름입니다.
이 헤더는 여러 용도로 쓰입니다. 분석 시스템은 트래픽 출처를 추적하기 위해 리퍼러에 의존합니다. 서버는 이 값을 로깅과 접근 제어에 사용합니다. 검색 엔진은 과거에 페이지 간의 링크 관계를 파악하는 데 리퍼러 데이터를 활용했습니다.
Referrer-Policy 응답 헤더는 Referer 헤더에 얼마나 많은 정보를 담을지 제어합니다. 정책은 전체 URL을 보내는 것(unsafe-url)부터 오리진만 보내는 것(origin), 헤더를 아예 생략하는 것(no-referrer)까지 다양합니다. 대부분의 브라우저는 기본값으로 strict-origin-when-cross-origin을 사용하며, 이는 동일 출처 요청에는 전체 URL을, 교차 출처 요청에는 오리진만 보냅니다.
기본 정책에서는 HTTPS 페이지에서 HTTP 페이지로 가는 요청(다운그레이드)에 Referer 헤더가 전송되지 않습니다. 프래그먼트 식별자와 자격 증명은 값에 절대 포함되지 않습니다.
절대 URL
스킴, 호스트, 경로, 쿼리 문자열을 모두 포함한 전체 URL입니다. 동일 출처 요청은 보통 완전한 URL을 포함합니다.
Referer: https://example.re/articles/http-headers?page=2
오리진만
경로나 쿼리 문자열 없이 스킴과 호스트만 담습니다. 브라우저의 기본 정책에서 교차 출처 요청에 전송됩니다.
Referer: https://example.re/
비어 있거나 없음
Referrer-Policy가 no-referrer로 설정된 경우, 요청이 북마크된 URL에서 온 경우, 주소 표시줄에 URL을 직접 입력한 경우, 또는 기본 정책에서 HTTPS에서 HTTP로 다운그레이드되는 경우에는 헤더가 아예 생략됩니다.
예시
검색 결과 페이지의 링크를 따라가는 브라우저가 검색 URL을 리퍼러로 보냅니다. 요청을 받은 서버는 방문자가 어디서 왔는지 알 수 있습니다.
Referer: https://search.example.re/results?q=http+headers
보안 페이지에서 발생한 교차 출처 요청은 기본 strict-origin-when-cross-origin 정책에 따라 오리진 부분만 보냅니다.
Referer: https://example.re/
동일 출처에서 로드된 리소스는 리퍼러 값에 전체 경로와 쿼리 문자열을 포함합니다.
Referer: https://example.re/docs/guide?section=headers