Sec-GPC
Privacy regulations require a machine-readable opt-out signal for data sale and sharing. The Sec-GPC request header transmits that signal, expressing a preference against cross-context targeted advertising.
Usage
The Sec-GPC header is part of the Global Privacy
Control (GPC) specification developed at the W3C. When
a browser sends Sec-GPC: 1, the signal expresses the
preference to opt out of data sale and sharing. The
absence of the header means no preference has been
stated.
GPC builds on the concept behind Do Not Track (DNT) but carries stronger legal backing. Several privacy regulations recognize GPC as a valid opt-out mechanism. The California Consumer Privacy Act (CCPA/CPRA) requires businesses to treat GPC as a binding opt-out of data sale and sharing. Colorado and other US states with comprehensive privacy laws include similar provisions. California legislation will require browsers to provide a built-in GPC setting once the mandate takes effect.
The header uses the Sec- prefix, preventing JavaScript
from setting or modifying the value via the
XMLHttpRequest and fetch() APIs. On the client
side, the navigator.globalPrivacyControl property
exposes the same preference as a boolean. Scripts
checking this property see true when GPC is active
and false otherwise.
The header is sent with every request when the user has enabled the preference. Servers receiving the signal are expected to apply applicable privacy protections. In the absence of regulatory requirements, the specification leaves the response to server discretion.
Firefox sends Sec-GPC by default in private browsing and exposes the preference as a manual setting for regular browsing. Brave and DuckDuckGo browsers send the header by default. Chromium-based browsers without built-in GPC support rely on third-party extensions.
Values
1
The value 1 is the only defined value. The header is
either sent with this value or omitted entirely. There
is no 0 value. The absence of the header is the
neutral state.
Example
A browser with GPC enabled sends the header on every
request. The value 1 indicates the preference to opt
out of data sale and sharing.
Sec-GPC: 1
A server receiving GPC alongside other privacy-related headers. The combination of Sec-GPC and DNT signals the preference through both the modern and legacy mechanisms.
Sec-GPC: 1
DNT: 1
JavaScript access to the GPC preference through the
navigator.globalPrivacyControl property. The value
mirrors the state of the Sec-GPC header for the
current page load.
if (navigator.globalPrivacyControl) {
// disable third-party sharing features
}
A signal the page cannot forge
The Sec- prefix places Sec-GPC among the
headers script is forbidden to set, so a value on
the wire was asserted by the browser under user
control rather than by page code. The predecessor
lacked exactly this property: DNT carried no
protected prefix and was script-settable, which
weakened its evidentiary value. Absence is equally
precise in the other direction, meaning no decision
rather than consent.
Legal weight arrived through enforcement. The California attorney general's Sephora settlement, 1.2 million dollars in 2022, turned on the company ignoring opt-outs delivered through this signal, establishing a browser-level preference as a CCPA opt-out a business processes rather than a suggestion.
Shipping and sending are different facts. Chrome and
Safari send nothing. Firefox sends the header by
default only in private browsing and otherwise ships
the mechanism behind a setting, off by default, so
regular browsing emits the header only after
a deliberate choice, with Brave and DuckDuckGo
enabling the signal out of the box. Server-side
handling starts with reading one header and one
value, Sec-GPC: 1, and a
/.well-known/gpc.json resource advertises whether
an origin intends to honor the signal.
See also
- Global Privacy Control (W3C)
- Global Privacy Control (globalprivacycontrol.org)
- Global Privacy Control (Chrome Status)
- DNT
- HTTP headers