Accept | Indicates which content types (expressed as MIME types) the client understands. Accept belongs to the set of CORS-safelisted request headers. Values I often see include */* or image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8 etc. |
Accept-Charset | Specifies the client's character encoding. This header should not be and is not widely used anymore. Compare with Content-Type . |
Accept-Encoding | Specifies the encoding the client understands. Typically, the encoding is a compression algorithm. A list of offical content encodings is maintained by IANA (other encodings also seen include bzip and bzip2). The encoding that is chosen by the server is sent with the Content-Encoding header. The server might send the status code 406 (not acceptable) if it cannot server the document in the requested encoding. |
Accept-Language | Specifies a list of (natural) languages and locales, for example de-CH , en-US or en-US, en , de, en-gb;q=0.8, en;q=0.7 etc…. The chosen language/locale is reported back to the client using the Content-Language header. Accept-Language belongs to the set of CORS-safelisted request headers. Can be changed in Firefox under about:config -> intl.accept_languages . See also the PowerShell cmdLet noun winAcceptLanguageFromLanguageListOptOut and the value AcceptLanguage under the registry key HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\International . If unable to serve the requested resource in one of the listed language, the server might send the status code 406 (not acceptable). |
Accept-Ranges | |
Age | |
Allow | |
Authorization | Used in response to response with status 401 (which includes the WWW-Authenticate header). |
Cache-Control | For example: max-age=0 . This header is should be used instead of the deprecated Pragma header. |
Clear-Site-Data | |
Connection | The value of Connection can be set to keep-alive to specify that the connection between the client and the server should not be terminated when the transaction finishes (Compare with Keep-Alive header. Setting it to close terminates the connection. This header is not allowed in HTTP/2 and HTTP/3 (although Chrome and Firefox treats it gracefully in such a case). See also the Upgrade header for Connection: upgrade . Connection belongs to the set of «hop-by-hop headers». |
Cookie | Cookie sends the stored HTTP cookies associated with the server (which were sent by the server using a previous Set-Cookie response header or specified in JavaScript with document.cookie ). |
Date | |
DNT | Do Not Track. Deprecated in favor of global privacy control. 1 (the typical value if this header is present), 0 or null. The value can be read in JavaScript from navigator.doNotTrack . |
Expect | |
Expires | |
Forwarded | |
Host | |
Keep-Alive | Keep-Alive is used in conjunction with Connection: keep-alive to set the timeout and max values (for example Keep-Alive: timeout=5, max=1000 ). This header is not allowed in HTTP/2 and HTTP/3. Keep-Aliave belongs to the set of «hop-by-hop headers». |
If-Match | Used together with ETag to detect mid-air edit collisions: When updating a resource, the client sends the ETag value it received from the server in the If-Match header. If the resource has changed in the mean time, the server responds with a 412 status («precodindition failed»). |
If-Modified-Since | |
If-None-Match | |
If-Range | |
If-Unmodified-Since | |
Last-Modified | |
Location | |
Origin | A version of Referer without revealing a path. |
Pragma | |
Proxy-Authenticate | Proxy-Authenticate <type> realm=<realm> . <type> is an authentication scheme. <realm> describes the protected «area». See also the WWW-Authenticate header and HTTP status 401, 403 and 407. Proxy-Authenticate belongs to the set of «hop-by-hop headers». |
Proxy-Authorization | Proxy-Authorization is typically when a server requests the credentials to authorize a user (status code 407). The syntax is Proxy-Authorization <type> <credentials> . <type> is an authentication scheme. <credentials> is the Base64 encoded form of username:secret . Proxy-Authorization belongs to the set of «hop-by-hop headers». |
Range | |
Referer | This is not a typo! Compare with the Origin header. |
Referrer-Policy | |
Server | |
sec-ch-ua | "Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99" … |
Sec-CH-UA-Bitness | 32 or 64 . See also navigator.userAgentData.getHighEntropyData('bitness') |
Sec-CH-UA-Form-Factor | Tablet VR … . See also navigator.userAgentData.getHighEntropyData('formFactor') |
sec-ch-ua-mobile | true , false . See also navigator.userAgentData.mobile |
sec-ch-ua-platform | Windows , Linux , Android … See also navigator.userAgentData.platform |
Sec-Fetch-Dest | |
Sec-Fetch-Mode | cors , navigate , no-cors , same-origin , websocket |
Sec-Fetch-Site | cross-site , same-site , same-origin or none |
TE | Specifies the transfer encodings a user agent is willing to accept (it would probably be more intuitive to call this header Accept-Transfer-Encoding ). See also the Transfer-Encoding response header. TE belongs to the set of «hop-by-hop headers». |
Trailers | Trailers belongs to the set of «hop-by-hop headers». |
Upgrade | Used to change the protocol used in an already established connection (for example HTTP/1.1 -> HTTP/2 or HTTP -> HTTPS). Using Upgrade requires also Connection: upgrade to be sent with a request. This header can only be used in HTTP/1.1. Upgrade belongs to the set of «hop-by-hop headers». |
Upgrade-Insecure-Requests | |
User-Agent | Identifies the user agent |
Warning | |
X-Real-IP | Compare with X-Forwarded-For |
X-Forwarded-For | Compare with X-Real-IP |
X-Forwarded-Proto | https … |
Client hints
The Sec-UA-CH-*
headers are so called client hints.
Client hints can be divided in
- Low entropy client hints (which don't give much information that can be used to create a fingerprinting for a user)
- Critical client hints
Low entropy client hints include Save-Data
, Sec-CH-UA
, Sec-CH-UA-Mobile
and Sec-CH-UA-Platform