Referrer-Policy 헤더 빌더
Referrer-Policy 값 선택 → 송출 요청이 보낼 Referer 헤더 정확히 확인 — 동일 오리진, 크로스 오리진 HTTPS, HTTPS→HTTP 다운그레이드.
Referrer-Policy: strict-origin-when-cross-origin<meta name="referrer" content="strict-origin-when-cross-origin">
| 시나리오 | Referer 전송 |
|---|---|
| 동일 오리진 (HTTPS→HTTPS, 동일 호스트) | https://app.example.com/page?id=42 |
| 크로스 오리진 (HTTPS→HTTPS, 다른 호스트) | https://app.example.com/ |
| 다운그레이드 (HTTPS→HTTP) | (no header) |
모든 HTML 응답에 헤더를 적용하세요. 헤더를 설정할 수 없을 때(헤더 설정을 허용하지 않는 정적 호스팅 등)는 <meta name="referrer"> 태그를 쓰면 됩니다.
사용법
- 정책 선택. 현대 브라우저 기본값은
strict-origin-when-cross-origin— HTTPS→HTTPS 크로스엔 오리진만 누출, 다운그레이드엔 아무것도 안 보냄. - 예시 3행 읽어 브라우저가 정확히 뭐 보낼지 확인.
- 응답 헤더(선호) 또는
<meta>태그(헤더 제어 불가 HTML 페이지에서 작동) 복사.
자세한 설명
펼치기접기
Referrer-Policy 헤더는 누군가 링크를 따라 나가거나 페이지가 하위 리소스를 가져올 때, 여러분의 URL이 Referer 요청 헤더에 얼마나 실려 가는지를 제어합니다. 여덟 가지 표준 정책 중 하나를 고르면, 중요한 세 가지 상황에서 수신 서버가 실제로 무엇을 보게 되는지 그대로 보여 줍니다. 같은 출처로 가는 요청, HTTPS로 나가는 교차 출처 요청, 그리고 평문 HTTP로 격하되는 교차 출처 요청입니다. 응답 헤더 형태와 <meta name="referrer"> 형태를 모두 출력하므로, 서버에서 정책을 걸 수도 있고 CDN이 이미 캐시한 HTML 안에서 걸 수도 있습니다.
철자는 이쪽의 오타가 아닙니다. 1996년 HTTP 명세에 Referer로 적혔고, 실수를 알아챘을 때는 고치기에 너무 늦어서, 이후 모든 구현이 그대로 물려받았습니다. 그것을 제어하는 정책 헤더는 철자가 올바르고, 자바스크립트 속성 document.referrer도 마찬가지입니다. 그래서 둘 다 다루는 코드는 한 파일 안에서 두 철자를 정확히 구분해 써야 합니다.
기본값은 사람들이 생각하는 것보다 중요합니다. 바뀌었기 때문입니다. 예전 브라우저는 HTTPS 목적지라면 전체 URL을 보냈지만, 지금의 크롬·파이어폭스·사파리는 strict-origin-when-cross-origin을 기본값으로 씁니다. 같은 출처에는 전체 URL을, 다른 출처에는 스킴과 호스트만, HTTP로 격하될 때는 아무것도 보내지 않습니다. 이 기본값 자체가 이미 합리적인 프라이버시 입장이므로, 헤더를 명시적으로 거는 주된 이유는 더 조이거나 의도를 문서로 남기기 위해서입니다.
더 조일 때의 대가는 따져 볼 만합니다. URL은 경로와 쿼리 문자열에 든 모든 것을 흘립니다. 비밀번호 재설정 토큰, 문서 식별자, 누군가 입력한 검색어까지요. no-referrer는 그것을 완전히 막습니다. 동시에 원래라면 등장했을 모든 분석 대시보드에서 여러분의 사이트를 지우고, 여러분이 보내 준 트래픽을 측정하는 제휴사의 유입 집계를 망가뜨리며, 어떤 서버는 요청 자체를 거부하게 만듭니다. 핫링크 차단이 대개 바로 이 헤더를 확인하는 방식으로 구현되기 때문입니다. strict-origin이 중간 지점입니다. 수신 사이트는 방문자를 여러분이 보냈다는 사실은 알되, 그가 어느 페이지에 있었는지는 알지 못합니다.
자주 묻는 질문
안전한 기본 정책?
strict-origin-when-cross-origin. 동일 오리진엔 전체 URL(분석 여전히 작동), HTTPS 크로스엔 오리진만, HTTP 다운그레이드엔 아무것도. 정책 설정 안 하면 현대 브라우저 암시적 기본값.
왜 unsafe-url 플래그?
HTTPS→HTTP 다운그레이드 포함 모든 목적지에 전체 URL(쿼리 스트링 포함) 전송. 쿼리 스트링엔 토큰·ID·개인정보 자주 포함 — unsafe-url은 그것들을 네트워크와 목적지의 광고·분석·임베드에 누출.
이걸 조인 뒤로 분석 도구가 유입을 못 잡는 이유는?
유입 집계는 Referer 헤더를 읽는데, 엄격한 정책은 교차 출처 요청에서 그것을 출처만 남기고 잘라내거나 아예 없앤다. 그게 의도된 효과다. 사람이 떠나온 페이지의 경로에는 검색어나 문서 이름, 계정 식별자가 들어 있는 경우가 많기 때문이다. 그러니 정책을 느슨하게 풀 게 아니라, 실제로 필요한 캠페인 정보를 링크 안에 담아 보내라.
이 정책이 내가 링크한 페이지로부터 출처를 숨겨주나?
브라우저가 헤더에 무엇을 실어 보낼지를 통제할 뿐이다. 서버가 로그에 남기고 서드파티 스크립트가 거기서 읽는 값이 그것이다. 목적지가 다른 경로로 방문자의 출처를 아는 것은 막지 못한다. URL 안의 파라미터, 클릭 식별자, 혹은 사람이 직접 알려주는 것이 그렇다. 익명성이 아니라 기본적으로 새어 나가는 양을 줄이는 장치로 보라.
관련 도구
HSTS 헤더 빌더
Strict-Transport-Security 헤더 구성 — max-age·includeSubDomains·preload, preload 리스트 자격 실시간 체크.
네트워크
Permissions-Policy 헤더 빌더
Permissions-Policy 응답 헤더 빌드 — camera·microphone·geolocation·payment·fullscreen 등 20+ 브라우저 기능을 오리진 허용 리스트로 토글.
네트워크
CORS 헤더 빌더
Access-Control-* 응답 헤더 체크리스트 구성, 4 프리셋·위험한 조합 실시간 경고.
네트워크
Content-Security-Policy 빌더
디렉티브별 소스 리스트로 CSP 헤더 빌드, 3개 시작 프리셋·위험한 와일드카드 실시간 경고.
네트워크
SPF 레코드 빌더
메커니즘·IP·include로 SPF TXT 레코드 작성, 실시간 DNS 조회 카운트와 경고.
네트워크
CSP 해시 생성기
Content-Security-Policy로 화이트리스트하려는 인라인 <script>·<style>의 sha256/384/512 base64 해시 계산.
네트워크