--- title: Referrer-Policy header short-title: Referrer-Policy slug: Web/HTTP/Reference/Headers/Referrer-Policy page-type: http-header browser-compat: http.headers.Referrer-Policy sidebar: http --- The HTTP **`Referrer-Policy`** {{Glossary("response header")}} controls how much [referrer information](/en-US/docs/Web/Privacy/Guides/Referer_header:_privacy_and_security_concerns) (sent with the {{HTTPHeader("Referer")}} header) should be included with requests. Aside from the HTTP header, you can [set this policy in HTML](#integration_with_html).
Header type {{Glossary("Response header")}}
## Syntax ```http Referrer-Policy: no-referrer Referrer-Policy: no-referrer-when-downgrade Referrer-Policy: origin Referrer-Policy: origin-when-cross-origin Referrer-Policy: same-origin Referrer-Policy: strict-origin Referrer-Policy: strict-origin-when-cross-origin Referrer-Policy: unsafe-url ``` > [!NOTE] > The header name {{HTTPHeader("Referer")}} is a misspelling of the word "referrer". The `Referrer-Policy` header does not share this misspelling. ## Directives - `no-referrer` - : The {{HTTPHeader("Referer")}} header will be omitted: sent requests do not include any referrer information. - `no-referrer-when-downgrade` - : Send the {{glossary("origin")}}, path, and query string in {{HTTPHeader("Referer")}} when the protocol security level stays the same or improves (HTTP→HTTP, HTTP→HTTPS, HTTPS→HTTPS). Don't send the {{HTTPHeader("Referer")}} header for requests to less secure destinations (HTTPS→HTTP, HTTPS→file). - `origin` - : Send only the {{glossary("origin")}} in the {{HTTPHeader("Referer")}} header. For example, a document at `https://example.com/page.html` will send the referrer `https://example.com/`. - `origin-when-cross-origin` - : When performing a {{glossary("Same-origin_policy", "same-origin")}} request, send the {{glossary("origin")}}, path, and query string. Send only the origin for cross-origin requests and requests to less secure destinations (HTTPS→HTTP). - `same-origin` - : Send the {{glossary("origin")}}, path, and query string for {{glossary("Same-origin_policy", "same-origin")}} requests. Don't send the {{HTTPHeader("Referer")}} header for cross-origin requests. - `strict-origin` - : Send only the origin when the protocol security level stays the same (HTTPS→HTTPS). Don't send the {{HTTPHeader("Referer")}} header to less secure destinations (HTTPS→HTTP). - `strict-origin-when-cross-origin` (default) - : Send the origin, path, and query string when performing a same-origin request. For cross-origin requests send the origin (only) when the protocol security level stays same (HTTPS→HTTPS). Don't send the {{HTTPHeader("Referer")}} header to less secure destinations (HTTPS→HTTP). > [!NOTE] > This is the default policy if no policy is specified, or if the provided value is invalid (see spec revision [November 2020](https://github.com/whatwg/fetch/pull/1066)). Previously the default was `no-referrer-when-downgrade`. - `unsafe-url` - : Send the origin, path, and query string when performing any request, regardless of security. > [!WARNING] > This policy will leak potentially-private information from HTTPS resource URLs to insecure origins. Carefully consider the impact of this setting. ## Effect on the `Origin` header The referrer policy also affects whether the user agent sets the {{HTTPHeader("Origin")}} header with the request's origin or as `null` (as well as the {{HTTPHeader("Referer")}} header). Requests using `GET` or `HEAD`, or made in `cors`, `websocket`, or `webtransport` [mode](/en-US/docs/Web/API/Request/mode), are never affected: if the user agent sends an `Origin` header for them at all, it sends the request's origin, regardless of the referrer policy. For other requests — such as HTML form submissions or `fetch()` calls using `mode: "same-origin"` or `"no-cors"` — the user agent sets `Origin` to `null` when the referrer policy is: - `no-referrer`. - `no-referrer-when-downgrade`, `strict-origin`, or `strict-origin-when-cross-origin`, and the request goes from an `https` origin to a URL that isn't `https`. - `same-origin`, and the request is cross-origin. Any other policy value leaves the `Origin` header set to the request's origin. > [!NOTE] > Because `fetch()` defaults to `mode: "cors"`, a same-origin `fetch()` `POST` always sends its real `Origin`, even under `Referrer-Policy: no-referrer`. The null-`Origin` behavior above therefore mainly applies to `navigate`-mode requests, like HTML form submissions, rather than to `fetch()` calls. ## Integration with HTML You can also set referrer policies inside HTML. For example, you can set the referrer policy for the entire document with a {{HTMLElement("meta")}} element with a [name](/en-US/docs/Web/HTML/Reference/Elements/meta/name) of `referrer`: ```html ``` You can specify the `referrerpolicy` attribute on {{HTMLElement("a")}}, {{HTMLElement("area")}}, {{HTMLElement("img")}}, {{HTMLElement("iframe")}}, {{HTMLElement("script")}}, or {{HTMLElement("link")}} elements to set referrer policies for individual requests: ```html … ``` Alternatively, you can set a `noreferrer` [link relation](/en-US/docs/Web/HTML/Reference/Attributes/rel) on an `a`, `area`, or `link` elements: ```html … ``` > [!WARNING] > As seen above, the `noreferrer` link relation is written without a dash. When you specify the referrer policy for the entire document with a {{HTMLElement("meta")}} element, it should be written _with_ a dash: ``. ## Integration with CSS CSS can fetch resources referenced from stylesheets. These resources follow a referrer policy as well: - External CSS stylesheets use the default policy (`strict-origin-when-cross-origin`), unless it's overwritten by a `Referrer-Policy` HTTP header on the CSS stylesheet's response. - For {{HTMLElement("style")}} elements or [`style` attributes](/en-US/docs/Web/API/HTMLElement/style), the owner document's referrer policy is used. ## Examples ### `no-referrer` | From document | Navigation to | Referrer used | | -------------------------- | ------------- | --------------- | | `https://example.com/page` | _anywhere_ | _(no referrer)_ | ### `no-referrer-when-downgrade` | From document | Navigation to | Referrer used | | --------------------------- | ------------------------------- | -------------------------- | | `https://example.com/page` | `https://example.com/otherpage` | `https://example.com/page` | | `https://example.com/page` | `https://mozilla.org` | `https://example.com/page` | | `https://example.com/page` | **http**://example.com | _(no referrer)_ | | **http**://example.com/page | _anywhere_ | `http://example.com/page` | ### `origin` | From document | Navigation to | Referrer used | | -------------------------- | ------------- | ---------------------- | | `https://example.com/page` | _anywhere_ | `https://example.com/` | ### `origin-when-cross-origin` | From document | Navigation to | Referrer used | | -------------------------- | ------------------------------- | -------------------------- | | `https://example.com/page` | `https://example.com/otherpage` | `https://example.com/page` | | `https://example.com/page` | `https://mozilla.org` | `https://example.com/` | | `https://example.com/page` | **http**://example.com/page | `https://example.com/` | ### `same-origin` | From document | Navigation to | Referrer used | | -------------------------- | ------------------------------- | -------------------------- | | `https://example.com/page` | `https://example.com/otherpage` | `https://example.com/page` | | `https://example.com/page` | `https://mozilla.org` | _(no referrer)_ | ### `strict-origin` | From document | Navigation to | Referrer used | | --------------------------- | ---------------------- | ---------------------- | | `https://example.com/page` | `https://mozilla.org` | `https://example.com/` | | `https://example.com/page` | **http**://example.com | _(no referrer)_ | | **http**://example.com/page | _anywhere_ | `http://example.com/` | ### `strict-origin-when-cross-origin` | From document | Navigation to | Referrer used | | -------------------------- | ------------------------------- | -------------------------- | | `https://example.com/page` | `https://example.com/otherpage` | `https://example.com/page` | | `https://example.com/page` | `https://mozilla.org` | `https://example.com/` | | `https://example.com/page` | **http**://example.com | _(no referrer)_ | ### `unsafe-url` | From document | Navigation to | Referrer used | | -------------------------------- | ------------- | -------------------------------- | | `https://example.com/page?q=123` | _anywhere_ | `https://example.com/page?q=123` | ### Specify a fallback policy If you want to specify a fallback policy in case the desired policy hasn't got wide enough browser support, use a comma-separated list with the desired policy specified last: ```http Referrer-Policy: no-referrer, strict-origin-when-cross-origin ``` In the above scenario, `no-referrer` is used only if the browser does not support the `strict-origin-when-cross-origin` policy. > [!NOTE] > Specifying multiple values is only supported in the `Referrer-Policy` HTTP header, and not in the `referrerpolicy` attribute. ## Browser-specific preferences/settings ### Firefox preferences You can configure the _default_ referrer policy in Firefox preferences. The preference names are version specific: - Firefox version 59 and later: `network.http.referer.defaultPolicy` (and `network.http.referer.defaultPolicy.pbmode` for private networks) - Firefox versions 53 to 58: `network.http.referer.userControlPolicy` All of these settings take the same set of values: `0 = no-referrer`, `1 = same-origin`, `2 = strict-origin-when-cross-origin`, `3 = no-referrer-when-downgrade`. ## Specifications {{Specifications}} ## Browser compatibility {{Compat}} ## See also - [Web security > Referer header: privacy and security concerns](/en-US/docs/Web/Privacy/Guides/Referer_header:_privacy_and_security_concerns) - When using [Fetch](/en-US/docs/Web/API/Fetch_API): {{domxref("Request.referrerPolicy")}} - [Same-origin policy](/en-US/docs/Web/Security/Defenses/Same-origin_policy) - [HTTP referer on Wikipedia](https://en.wikipedia.org/wiki/HTTP_referer) - [Tighter Control Over Your Referrers – Mozilla Security Blog](https://blog.mozilla.org/security/2015/01/21/meta-referrer/)