Open Configure → Restriction Policies → Privacy control → Header filter. This section sits under the Privacy control menu group alongside Cookie filter, Header filter and Elevated Privacy — configure them together, since a Cookie filter allow row and an Elevated Privacy STANDARD row can otherwise fight over the same header.The Header-filtering section (safesquid-header-filtering(5)) allows administrators to strip out or inject HTTP headers into client requests or server responses.
Allow/Deny list order (first match wins, unlike Cookie filter’s last-match rule), Insert with variable expansion.
Dual-List Policy Engine: Header filtering utilizes a global Allow/Deny switch. If the global policy is set to Allow, SafeSquid first scans the Deny List to strip headers (action = FALSE), then evaluates the Allow List to preserve exceptions.
Insertion Engine: Independent of the filter list, the Insert list injects entirely new headers into the stream. The inserted headers undergo variable expansion, meaning runtime variables (like usernames or IP addresses) can be dynamically injected into the header value.
Flags Targeting: Both filter and insert rules target either the Request, Response, or Both (which & flags).
The console splits Header filter into five tabs. Allow and Deny share one row form, so
the fields are documented once under Allow; Insert reuses the same fields with different
meanings, called out in that tab.
Enabled (enabled) — turns Header filter on or off for all connections, unless the matching Access entry’s Bypass grants Header filtering.
Policy (policy) — the default outcome when no Allow/Deny row matches a header field: Deny strips it, Allow forwards it. It also decides which list is walked first (see step 2–3 above).
A matching Allow row keeps the header field. With Policy Deny the Allow list is walked
first; with Policy Allow it is walked second, where it can restore a field the
Deny pass stripped. The first matching row in that pass decides the field — the opposite
of Cookie filter’s last-match rule — so put specific regexes above broad ones. A kept field
is logged as allowed.
Enabled (enabled) — disabled rows are skipped and never match.
Comment (comment) — operator note; shown only in the configuration, never to end users.
Profiles — Apply only when the connection has one of these profiles. Blank = all connections. Prefix ! to skip connections that have a profile (for example !Guest).
Type — On Allow/Deny: regex on the header field name (for example Referer, User-Agent); blank matches any name. On Insert: literal header name to add (not a regex).
Value — On Allow/Deny: regex on the field value; blank matches any value. On Insert: header body with variables expanded.
Applies to — CLIENT HEADER — request headers (browser → origin). SERVER HEADER — response headers (origin → browser). Row must include the direction being filtered.
Internal field names — Profiles is profiles, Type is type, Value is value, Applies to is which.
Insert non-blank requirement — both Type and Value must be non-blank for an Insert row to apply.
A matching Deny row strips the header field from the message and logs it as removed in the
native header logs. With Policy Deny the Deny list is walked second; with Policy
Allow it is walked first. First match in that pass wins.Stripping the destination’s own Content-Security-Policy with a Deny row is a prerequisite
for writing your own — see the Insert tab.Rows use the same form as the Allow list — see the Allow tab for every field.
Insert runs after the allow/deny pass and adds entirely new headers rather than filtering
existing ones. It is cumulative, not first-match: every enabled matching Insert row can
add a header to the same message.Three fields behave differently here than on an Allow/Deny row:
Type — a literal header name to add, not a regex.
Value — the header body, with connection variables expanded at runtime, so a username
or client IP can be injected dynamically.
Both Type and Value must be non-blank or the row does not apply.
Content-Security-Policy (CSP) is a response header that controls what an already-loaded page is allowed to do — which hosts its scripts may connect to, whether it may embed frames, whether it may submit forms elsewhere. Insert rows can write one, which makes Header filter a meaningful defense even for destinations you have chosen to allow: a legitimate site can still be abused to run injected scripts, load third-party tracking, or exfiltrate data to an unexpected destination.
Browsers combine multiple CSP headers by intersecting them, taking whichever directive is more restrictive. A SafeSquid-authored CSP only takes clean effect if the destination’s ownContent-Security-Policy is stripped first with a Deny row. Skip that step and the browser merges the two. The practical result is usually more restrictive than intended, and pages can appear broken (missing fonts, broken widgets) for reasons that are not obvious from the Insert row alone.
SafeSquid’s built-in Profile catalog offers three tiers of increasing openness, applied via an Access Profile and referenced from Insert rows:
Minimal content access — baseline. Same-origin scripts and forms only; connect-src and script-src are restricted to the page’s own host, and violations are reported back to SafeSquid.
Standard content access — relaxes connect-src and child-src to the page’s own host domain, while keeping the other directives as tight as the minimal tier.
Full content access — removes the added restriction once a connection is confirmed trustworthy.
See the header_filter_profiles catalog in Suggested profiles, which names these same tiers plus DROP ORIGINAL CSP.
A read-only, unfiltered table (type / value columns) showing the headers on the
request that loaded the panel itself — Host, Proxy-Connection, Content-Length,
X-Requested-With, User-Agent, Accept, Content-Type, Origin, Referer, Accept-Encoding,
Accept-Language in this build. The console’s own description calls these “example headers,”
confirming the panel is a live worked example of one request rather than a running log across
your traffic — use it to see the exact header names and casing your browser sends, to build
Allow, Deny and Insert rows against real names instead of guessing them. No filter or export
control is present.
Open Configure → Restriction Policies → Privacy control → Header filter. Five sub-tabs:
Global (Enabled/Policy), Allow, Deny, Insert, and View headers — the last
lets you inspect real header names and values from a live connection before writing regexes.
Deny row: strips the response’s own Content-Security-Policy field on all connections.
Insert row: applies the minimal-access CSP tier to all connections by default.
Insert row: gated to a line-of-business Profile, applies the standard-access tier instead.
Result: every response gets a clean, SafeSquid-authored CSP instead of a merged one. Most sites run under the tight, same-origin-only policy. The one tool that needs to reach its own backend gets the slightly more permissive tier.
Result: the Server field is stripped from every response, hiding the origin’s web-server signature. All other fields pass through unless another Deny row matches.
Use View headers in the Web UI to capture real header names and values before writing regexes.
Enable HEADER in LOG_LEVEL and read native removed: / added: lines.
Open Reports → Detailed logs while reproducing from a known client.
Enable System configuration debug response headers (see Debug response headers) to inspect policy outcomes on the wire.
Use browser devtools to confirm the Content-Security-Policy header a page actually received matches the tier you intended. A page that looks broken after adding a CSP entry is the classic symptom of the site’s own CSP not having been stripped first.
Cookie filter - control which HTTP cookies pass between clients and servers using a global policy plus allow and deny override lists.
Elevated Privacy - reduce cross-site tracking by stripping third-party cookies and selected tracking headers.
Suggested Profiles - legacy reference: the autocomplete catalog of ready-made profile names in the Web UI. This section is not in the current Configure console.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"SafeSquid Documentation","description":"Deploy Zero-Trust Web Security — SafeSquid Secure Web Gateway documentation.","colors":{"primary":"#0066CC","light":"#3B82F6","dark":"#0F172A"},"logo":{"light":"https://mintcdn.com/safe-squid-labs-12a0916f/WapkOaLV2w2WE_m9/images/logos/safesquid/safesquid-mark-blue.png?fit=max\u0026auto=format\u0026n=WapkOaLV2w2WE_m9\u0026q=85\u0026s=b7b9c81a4dfce86823f854d9510e5cec","dark":"https://mintcdn.com/safe-squid-labs-12a0916f/PZ5D4OEI8Q1II8co/images/safesquidWhite.png?fit=max\u0026auto=format\u0026n=PZ5D4OEI8Q1II8co\u0026q=85\u0026s=149dccbc6157c7707f7edba211ae87b3","href":"/getting_started/welcome"},"favicon":"https://mintcdn.com/safe-squid-labs-12a0916f/WapkOaLV2w2WE_m9/images/favicon.ico?fit=max\u0026auto=format\u0026n=WapkOaLV2w2WE_m9\u0026q=85\u0026s=7a799a5cc14069284c934d5f83717827","navbar":{"links":[{"href":"/blog","label":"Blog"},{"href":"https://help.safesquid.com/portal/en/community/safesquid-labs","label":"Forum"},{"icon":{"style":"brands","name":"github"},"href":"https://github.com/SafeSquid-Labs","label":""}],"primary":{"type":"button","label":"Get Started","href":"https://key.safesquid.com"}},"footer":{"socials":{"website":"https://www.safesquid.com/","github":"https://github.com/SafeSquid-Labs","x":"https://x.com/safesquid","linkedin":"https://in.linkedin.com/company/safesquid","youtube":"https://www.youtube.com/@securewebgateway"}},"icons":{"library":"fontawesome"},"integrations":{"ga4":{"measurementId":"G-ZVZHSKFGQF"}},"banner":{"content":"[Join our Blue Team for a live layer 7 mitigation workshop](https://meet.safesquid.com)","dismissible":true,"type":"info"},"styling":{"latex":false},"navigation":{"global":{"languages":[{"language":"en","default":true,"href":"/getting_started/welcome"},{"language":"es","href":"/?lang=es"}],"versions":[{"version":"v2026.0312.1923","default":true,"href":"/getting_started/welcome"},{"version":"v2024.0315.1413","href":"/?version=legacy"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"safe-squid-labs-12a0916f","hasAudioNarration":false,"actualSubdomain":"safe-squid-labs-12a0916f","customDomains":["docs.safesquid.com"],"gitSource":{"type":"github","owner":"safesquid-labs","repo":"safesquid-docs","deployBranch":"main","contentDirectory":"public","isPrivate":false,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":true,"issues":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ac7bb6e8abd6d065dca7197","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"Use Cases","count":86},{"language":"default","tag":"Configuration","count":44},{"language":"default","tag":"Deployment","count":43},{"language":"default","tag":"Architecture","count":24},{"language":"default","tag":"Troubleshooting","count":20},{"language":"default","tag":"Access Restriction","count":17},{"language":"default","tag":"Authentication","count":17},{"language":"default","tag":"Application Setup","count":10},{"language":"default","tag":"Real Time Content Security","count":10},{"language":"default","tag":"Application Ecosystem","count":9}],"searchSettings":{"isFiltersEnabled":true}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"support@safesquid.net"}},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":"a:has(>img.nav-logo){flex-shrink:0!important}#sidebar-content li[data-active]>a{color:rgb(22, 25, 29)!important}.dark #sidebar-content li[data-active]>a{background-color:rgb(59, 130, 246)!important;color:rgb(22, 25, 29)!important}"}],"page":{"pagePath":"configuration/restriction_policies/privacy_control/header_filter","slug":"/configuration/restriction_policies/privacy_control/header_filter","pageMetadata":{"title":"Header filter","description":"Strip or inject HTTP headers on client requests and server responses using global, allow, deny, and insert rules.","keywords":["header filter","HTTP header filtering","privacy control header filter","SafeSquid header rules"],"href":"/configuration/restriction_policies/privacy_control/header_filter"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Strip or inject HTTP headers on client requests and server responses using global, allow, deny, and insert rules.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Frame,Heading,Mermaid,OptimizedImage,Tab,Tabs,Tip,Warning}=_components;if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`1`,id:`strip-or-inject-headers-with-the-header-filter`,children:`Strip or Inject Headers With the Header Filter`}),`\n`,_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`Configure → Restriction Policies → Privacy control → Header filter`}),`. This section sits under the `,_jsx(_components.strong,{children:`Privacy control`}),` menu group alongside `,_jsx(_components.a,{href:`/configuration/restriction_policies/privacy_control/cookie_filter`,children:`Cookie filter`}),`, `,_jsx(_components.a,{href:`/configuration/restriction_policies/privacy_control/header_filter`,children:`Header filter`}),` and `,_jsx(_components.a,{href:`/configuration/restriction_policies/privacy_control/elevated_privacy`,children:`Elevated Privacy`}),` — configure them together, since a Cookie filter allow row and an Elevated Privacy STANDARD row can otherwise fight over the same header.`]}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`Header-filtering`}),` section (`,_jsx(_components.code,{children:`safesquid-header-filtering(5)`}),`) allows administrators to strip out or inject HTTP headers into client requests or server responses.`]}),`\n`,_jsx(Mermaid,{chart:`flowchart TB\nfield[Header field] --> policy{Policy Deny or Allow?}\npolicy -->|Deny| walkA1[Walk Allow list]\npolicy -->|Allow| walkD1[Walk Deny list]\nwalkA1 --> walkD2[Walk Deny list]\nwalkD1 --> walkA2[Walk Allow list]\nwalkD2 --> first[First matching row decides field]\nwalkA2 --> first\nfirst --> result{Allow or strip?}\nresult -->|Allow| keep[Field kept]\nresult -->|Deny| strip[Field stripped]\nkeep --> insert[Insert rows apply cumulative]\nstrip --> insert`}),`\n`,_jsx(Heading,{level:`2`,id:`core-mechanics`,children:`Core mechanics`}),`\n`,_jsxs(_components.p,{children:[`Allow/Deny list order (`,_jsx(_components.strong,{children:`first`}),` match wins, unlike Cookie filter’s last-match rule), Insert with variable expansion.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Dual-List Policy Engine`}),`: Header filtering utilizes a global Allow/Deny switch. If the global policy is set to `,_jsx(_components.code,{children:`Allow`}),`, SafeSquid first scans the Deny List to strip headers (`,_jsx(_components.code,{children:`action = FALSE`}),`), then evaluates the Allow List to preserve exceptions.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Insertion Engine`}),`: Independent of the filter list, the `,_jsx(_components.code,{children:`Insert`}),` list injects entirely new headers into the stream. The inserted headers undergo variable expansion, meaning runtime variables (like usernames or IP addresses) can be dynamically injected into the header value.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Flags Targeting`}),`: Both filter and insert rules target either the Request, Response, or Both (`,_jsx(_components.code,{children:`which \u0026 flags`}),`).`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`how-safesquid-processes-the-lists`,children:`How SafeSquid processes the lists`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`For each header field on the message being filtered:`}),`\n`,_jsxs(_components.li,{children:[`If Policy is `,_jsx(_components.strong,{children:`Deny`}),`, SafeSquid walks `,_jsx(_components.strong,{children:`Allow`}),` first, then `,_jsx(_components.strong,{children:`Deny`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`If Policy is `,_jsx(_components.strong,{children:`Allow`}),`, SafeSquid walks `,_jsx(_components.strong,{children:`Deny`}),` first, then `,_jsx(_components.strong,{children:`Allow`}),` (Allow can restore a field Deny removed, and vice versa on the second pass).`]}),`\n`,_jsxs(_components.li,{children:[`Within each list pass, the `,_jsx(_components.strong,{children:`first`}),` matching row decides allow or strip for that field.`]}),`\n`,_jsxs(_components.li,{children:[`Stripped fields are removed and logged as `,_jsx(_components.code,{children:`removed`}),` in native header logs.`]}),`\n`,_jsxs(_components.li,{children:[`Insert runs after allow/deny. Both `,_jsx(_components.strong,{children:`Type`}),` and `,_jsx(_components.strong,{children:`Value`}),` must be non-empty; Value supports connection variables.`]}),`\n`,_jsxs(_components.li,{children:[`A field that is kept (not stripped) is logged as `,_jsx(_components.code,{children:`allowed`}),`, alongside the `,_jsx(_components.code,{children:`removed`}),` note in step 5.`]}),`\n`,_jsx(_components.li,{children:`Insert rows are cumulative, not first-match — more than one enabled, matching Insert row can add a header to the same message.`}),`\n`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Order matters.`}),` On Allow/Deny rows, put specific regexes above broad ones — first match in that list pass wins for each field.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`section-fields`,children:`Section fields`}),`\n`,_jsxs(_components.p,{children:[`The console splits Header filter into five tabs. `,_jsx(_components.strong,{children:`Allow`}),` and `,_jsx(_components.strong,{children:`Deny`}),` share one row form, so\nthe fields are documented once under `,_jsx(_components.strong,{children:`Allow`}),`; `,_jsx(_components.strong,{children:`Insert`}),` reuses the same fields with different\nmeanings, called out in that tab.`]}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Global`,id:`global`,\"data-child-heading-ids\":`[\"global-fields\"]`,children:[_jsx(Heading,{level:`2`,id:`global-fields`,children:`Global fields`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Enabled (`,_jsx(_components.code,{children:`enabled`}),`)`]}),` — turns Header filter on or off for all connections, unless the matching Access entry’s `,_jsx(_components.strong,{children:`Bypass`}),` grants `,_jsx(_components.strong,{children:`Header filtering`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Policy (`,_jsx(_components.code,{children:`policy`}),`)`]}),` — the default outcome when no Allow/Deny row matches a header field: `,_jsx(_components.strong,{children:`Deny`}),` strips it, `,_jsx(_components.strong,{children:`Allow`}),` forwards it. It also decides which list is walked first (see step 2–3 above).`]}),`\n`]})]}),_jsxs(Tab,{title:`Allow`,id:`allow`,\"data-child-heading-ids\":`[\"what-an-allow-row-does\",\"row-fields\"]`,children:[_jsx(Heading,{level:`2`,id:`what-an-allow-row-does`,children:`What an Allow row does`}),_jsxs(_components.p,{children:[`A matching Allow row keeps the header field. With Policy `,_jsx(_components.strong,{children:`Deny`}),` the Allow list is walked\n`,_jsx(_components.strong,{children:`first`}),`; with Policy `,_jsx(_components.strong,{children:`Allow`}),` it is walked `,_jsx(_components.strong,{children:`second`}),`, where it can restore a field the\nDeny pass stripped. The `,_jsx(_components.strong,{children:`first`}),` matching row in that pass decides the field — the opposite\nof Cookie filter’s last-match rule — so put specific regexes above broad ones. A kept field\nis logged as `,_jsx(_components.code,{children:`allowed`}),`.`]}),_jsx(Heading,{level:`2`,id:`row-fields`,children:`Row fields`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Enabled (`,_jsx(_components.code,{children:`enabled`}),`)`]}),` — disabled rows are skipped and never match.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Comment (`,_jsx(_components.code,{children:`comment`}),`)`]}),` — operator note; shown only in the configuration, never to end users.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Profiles`}),` — Apply only when the connection has one of these profiles. Blank = all connections. Prefix `,_jsx(_components.code,{children:`!`}),` to skip connections that have a profile (for example `,_jsx(_components.code,{children:`!Guest`}),`).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Type`}),` — On Allow/Deny: regex on the header field name (for example `,_jsx(_components.code,{children:`Referer`}),`, `,_jsx(_components.code,{children:`User-Agent`}),`); blank matches any name. On Insert: literal header name to add (not a regex).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Value`}),` — On Allow/Deny: regex on the field value; blank matches any value. On Insert: header body with variables expanded.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Applies to`}),` — `,_jsx(_components.strong,{children:`CLIENT HEADER`}),` — request headers (browser → origin). `,_jsx(_components.strong,{children:`SERVER HEADER`}),` — response headers (origin → browser). Row must include the direction being filtered.`]}),`\n`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Internal field names`}),` — Profiles is `,_jsx(_components.code,{children:`profiles`}),`, Type is `,_jsx(_components.code,{children:`type`}),`, Value is `,_jsx(_components.code,{children:`value`}),`, Applies to is `,_jsx(_components.code,{children:`which`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Insert non-blank requirement`}),` — both Type and Value must be non-blank for an Insert row to apply.`]}),`\n`]})]}),_jsxs(Tab,{title:`Deny`,id:`deny`,\"data-child-heading-ids\":`[\"what-a-deny-row-does\"]`,children:[_jsx(Heading,{level:`2`,id:`what-a-deny-row-does`,children:`What a Deny row does`}),_jsxs(_components.p,{children:[`A matching Deny row strips the header field from the message and logs it as `,_jsx(_components.code,{children:`removed`}),` in the\nnative header logs. With Policy `,_jsx(_components.strong,{children:`Deny`}),` the Deny list is walked `,_jsx(_components.strong,{children:`second`}),`; with Policy\n`,_jsx(_components.strong,{children:`Allow`}),` it is walked `,_jsx(_components.strong,{children:`first`}),`. First match in that pass wins.`]}),_jsxs(_components.p,{children:[`Stripping the destination’s own `,_jsx(_components.code,{children:`Content-Security-Policy`}),` with a Deny row is a prerequisite\nfor writing your own — see the `,_jsx(_components.strong,{children:`Insert`}),` tab.`]}),_jsxs(_components.p,{children:[`Rows use the same form as the Allow list — see the `,_jsx(_components.strong,{children:`Allow`}),` tab for every field.`]})]}),_jsxs(Tab,{title:`Insert`,id:`insert`,\"data-child-heading-ids\":`[\"what-an-insert-row-does\",\"content-security-policy-tiers\"]`,children:[_jsx(Heading,{level:`2`,id:`what-an-insert-row-does`,children:`What an Insert row does`}),_jsxs(_components.p,{children:[`Insert runs `,_jsx(_components.strong,{children:`after`}),` the allow/deny pass and adds entirely new headers rather than filtering\nexisting ones. It is `,_jsx(_components.strong,{children:`cumulative, not first-match`}),`: every enabled matching Insert row can\nadd a header to the same message.`]}),_jsx(_components.p,{children:`Three fields behave differently here than on an Allow/Deny row:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Type`}),` — a literal header name to add, not a regex.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Value`}),` — the header body, with connection variables expanded at runtime, so a username\nor client IP can be injected dynamically.`]}),`\n`,_jsxs(_components.li,{children:[`Both `,_jsx(_components.strong,{children:`Type`}),` and `,_jsx(_components.strong,{children:`Value`}),` must be non-blank or the row does not apply.`]}),`\n`]}),_jsx(Heading,{level:`2`,id:`content-security-policy-tiers`,children:`Content-Security-Policy tiers`}),_jsx(_components.p,{children:`Content-Security-Policy (CSP) is a response header that controls what an already-loaded page is allowed to do — which hosts its scripts may connect to, whether it may embed frames, whether it may submit forms elsewhere. Insert rows can write one, which makes Header filter a meaningful defense even for destinations you have chosen to allow: a legitimate site can still be abused to run injected scripts, load third-party tracking, or exfiltrate data to an unexpected destination.`}),_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Browsers combine multiple CSP headers by intersecting them`}),`, taking whichever directive is more restrictive. A SafeSquid-authored CSP only takes clean effect if the destination’s `,_jsx(_components.strong,{children:`own`}),` `,_jsx(_components.code,{children:`Content-Security-Policy`}),` is stripped first with a Deny row. Skip that step and the browser merges the two. The practical result is usually `,_jsx(_components.strong,{children:`more`}),` restrictive than intended, and pages can appear broken (missing fonts, broken widgets) for reasons that are not obvious from the Insert row alone.`]})}),_jsx(_components.p,{children:`SafeSquid’s built-in Profile catalog offers three tiers of increasing openness, applied via an Access Profile and referenced from Insert rows:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Minimal content access`}),` — baseline. Same-origin scripts and forms only; `,_jsx(_components.code,{children:`connect-src`}),` and `,_jsx(_components.code,{children:`script-src`}),` are restricted to the page’s own host, and violations are reported back to SafeSquid.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Standard content access`}),` — relaxes `,_jsx(_components.code,{children:`connect-src`}),` and `,_jsx(_components.code,{children:`child-src`}),` to the page’s own host domain, while keeping the other directives as tight as the minimal tier.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Full content access`}),` — removes the added restriction once a connection is confirmed trustworthy.`]}),`\n`]}),_jsxs(_components.p,{children:[`See the `,_jsx(_components.code,{children:`header_filter_profiles`}),` catalog in `,_jsx(_components.a,{href:`/configuration/custom_settings/suggested_profiles`,children:`Suggested profiles`}),`, which names these same tiers plus `,_jsx(_components.code,{children:`DROP ORIGINAL CSP`}),`.`]})]}),_jsxs(Tab,{title:`View headers`,id:`view-headers`,\"data-child-heading-ids\":`[\"view-headers\"]`,children:[_jsx(Heading,{level:`2`,id:`view-headers`,children:`View headers`}),_jsxs(_components.p,{children:[`A read-only, unfiltered table (`,_jsx(_components.strong,{children:`type`}),` / `,_jsx(_components.strong,{children:`value`}),` columns) showing the headers on the\nrequest that loaded the panel itself — Host, Proxy-Connection, Content-Length,\nX-Requested-With, User-Agent, Accept, Content-Type, Origin, Referer, Accept-Encoding,\nAccept-Language in this build. The console’s own description calls these “example headers,”\nconfirming the panel is a live worked example of one request rather than a running log across\nyour traffic — use it to see the exact header names and casing your browser sends, to build\nAllow, Deny and Insert rows against real names instead of guessing them. No filter or export\ncontrol is present.`]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`examples`,children:`Examples`}),`\n`,_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`Configure → Restriction Policies → Privacy control → Header filter`}),`. Five sub-tabs:\n`,_jsx(_components.strong,{children:`Global`}),` (Enabled/Policy), `,_jsx(_components.strong,{children:`Allow`}),`, `,_jsx(_components.strong,{children:`Deny`}),`, `,_jsx(_components.strong,{children:`Insert`}),`, and `,_jsx(_components.strong,{children:`View headers`}),` — the last\nlets you inspect real header names and values from a live connection before writing regexes.`]}),`\n`,_jsx(Frame,{caption:`Privacy control — Header filter Global tab`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/safe-squid-labs-12a0916f/T2tf5IJBpEmDK3ub/images/configuration/privacy_control-header_filter.webp?fit=max\u0026auto=format\u0026n=T2tf5IJBpEmDK3ub\u0026q=85\u0026s=68d2ff80e45775619ffe082bebaf9ff2`,alt:`SafeSquid console showing the Privacy control Header filter Global tab with its five sub-tabs, the Edit Policy icon circled`,\"data-og-width\":`1440`,width:`1440`,\"data-og-height\":`700`,height:`700`,\"data-path\":`images/configuration/privacy_control-header_filter.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/safe-squid-labs-12a0916f/T2tf5IJBpEmDK3ub/images/configuration/privacy_control-header_filter.webp?w=280\u0026fit=max\u0026auto=format\u0026n=T2tf5IJBpEmDK3ub\u0026q=85\u0026s=4c438d29e8cd2142fe2da531b1021644 280w, https://mintcdn.com/safe-squid-labs-12a0916f/T2tf5IJBpEmDK3ub/images/configuration/privacy_control-header_filter.webp?w=560\u0026fit=max\u0026auto=format\u0026n=T2tf5IJBpEmDK3ub\u0026q=85\u0026s=2bafff52319fe6f702b23d5866272e53 560w, https://mintcdn.com/safe-squid-labs-12a0916f/T2tf5IJBpEmDK3ub/images/configuration/privacy_control-header_filter.webp?w=840\u0026fit=max\u0026auto=format\u0026n=T2tf5IJBpEmDK3ub\u0026q=85\u0026s=c11e226a853563fbc0386bf696574ffc 840w, https://mintcdn.com/safe-squid-labs-12a0916f/T2tf5IJBpEmDK3ub/images/configuration/privacy_control-header_filter.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=T2tf5IJBpEmDK3ub\u0026q=85\u0026s=dbf4dc73861aa3c8c4d2d16f8ea1c188 1100w, https://mintcdn.com/safe-squid-labs-12a0916f/T2tf5IJBpEmDK3ub/images/configuration/privacy_control-header_filter.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=T2tf5IJBpEmDK3ub\u0026q=85\u0026s=7667d5f92f3e8799601c7efa9ee9fefc 1650w, https://mintcdn.com/safe-squid-labs-12a0916f/T2tf5IJBpEmDK3ub/images/configuration/privacy_control-header_filter.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=T2tf5IJBpEmDK3ub\u0026q=85\u0026s=dc8288c05838e38e0ddfbef9f8740f7a 2500w`})}),`\n`,_jsxs(Tip,{children:[_jsx(Heading,{level:`3`,id:`strip-referer-on-all-users-except-marketing`,children:`Strip Referer on all users except marketing`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Policy: `,_jsx(_components.strong,{children:`Deny`})]}),`\n`,_jsxs(_components.li,{children:[`Allow row: Profiles `,_jsx(_components.code,{children:`Marketing`}),`, Type `,_jsx(_components.code,{children:`Referer`}),`, Applies to CLIENT HEADER`]}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Result:`}),` every client request loses the `,_jsx(_components.code,{children:`Referer`}),` field except connections with the Marketing profile, which keep it.`]})]}),`\n`,_jsxs(Tip,{children:[_jsx(Heading,{level:`3`,id:`insert-a-custom-request-header`,children:`Insert a custom request header`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Insert row: Type `,_jsx(_components.code,{children:`X-Proxy-User`}),`, Value `,_jsx(_components.code,{children:`$_USERNAME_$`}),`, Applies to CLIENT HEADER`]}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Result:`}),` after filtering, matching connections get `,_jsx(_components.code,{children:`X-Proxy-User`}),` added to the forwarded request with the expanded username variable.`]})]}),`\n`,_jsxs(Tip,{children:[_jsx(Heading,{level:`3`,id:`enforce-a-content-security-policy-correctly`,children:`Enforce a Content-Security-Policy correctly`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Deny row: strips the response’s own `,_jsx(_components.code,{children:`Content-Security-Policy`}),` field on all connections.`]}),`\n`,_jsx(_components.li,{children:`Insert row: applies the minimal-access CSP tier to all connections by default.`}),`\n`,_jsx(_components.li,{children:`Insert row: gated to a line-of-business Profile, applies the standard-access tier instead.`}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Result:`}),` every response gets a clean, SafeSquid-authored CSP instead of a merged one. Most sites run under the tight, same-origin-only policy. The one tool that needs to reach its own backend gets the slightly more permissive tier.`]})]}),`\n`,_jsxs(Tip,{children:[_jsx(Heading,{level:`3`,id:`allow-everything-hide-the-server-banner`,children:`Allow everything, hide the server banner`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Policy: `,_jsx(_components.strong,{children:`Allow`})]}),`\n`,_jsxs(_components.li,{children:[`Deny row: Type `,_jsx(_components.code,{children:`Server`}),`, Applies to SERVER HEADER`]}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Result:`}),` the `,_jsx(_components.code,{children:`Server`}),` field is stripped from every response, hiding the origin’s web-server signature. All other fields pass through unless another Deny row matches.`]})]}),`\n`,_jsx(Heading,{level:`2`,id:`how-to-verify`,children:`How to verify`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.strong,{children:`View headers`}),` in the Web UI to capture real header names and values before writing regexes.`]}),`\n`,_jsxs(_components.li,{children:[`Enable HEADER in `,_jsx(_components.code,{children:`LOG_LEVEL`}),` and read native `,_jsx(_components.code,{children:`removed:`}),` / `,_jsx(_components.code,{children:`added:`}),` lines.`]}),`\n`,_jsxs(_components.li,{children:[`Open `,_jsx(_components.strong,{children:`Reports → Detailed logs`}),` while reproducing from a known client.`]}),`\n`,_jsxs(_components.li,{children:[`Enable System configuration debug response headers (see `,_jsx(_components.a,{href:`/configuration/start_here/debug_response_headers`,children:`Debug response headers`}),`) to inspect policy outcomes on the wire.`]}),`\n`]}),`\n`,_jsxs(_components.ol,{start:`5`,children:[`\n`,_jsxs(_components.li,{children:[`Use browser devtools to confirm the `,_jsx(_components.code,{children:`Content-Security-Policy`}),` header a page actually received matches the tier you intended. A page that looks broken after adding a CSP entry is the classic symptom of the site’s own CSP not having been stripped first.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next steps`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.a,{href:`/configuration/restriction_policies/privacy_control/cookie_filter`,children:`Cookie filter`})}),` - control which HTTP cookies pass between clients and servers using a global policy plus allow and deny override lists.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.a,{href:`/configuration/restriction_policies/privacy_control/elevated_privacy`,children:`Elevated Privacy`})}),` - reduce cross-site tracking by stripping third-party cookies and selected tracking headers.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.a,{href:`/configuration/custom_settings/suggested_profiles`,children:`Suggested Profiles`})}),` - legacy reference: the autocomplete catalog of ready-made profile names in the Web UI. This section is not in the current Configure console.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Header filter","description":"Strip or inject HTTP headers on client requests and server responses using global, allow, deny, and insert rules.","keywords":["header filter","HTTP header filtering","privacy control header filter","SafeSquid header rules"],"href":"/configuration/restriction_policies/privacy_control/header_filter"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Strip or Inject Headers With the Header Filter","slug":"strip-or-inject-headers-with-the-header-filter","depth":1,"children":[]},{"title":"Core mechanics","slug":"core-mechanics","depth":2,"children":[{"title":"How SafeSquid processes the lists","slug":"how-safesquid-processes-the-lists","depth":3,"children":[]}]},{"title":"Section fields","slug":"section-fields","depth":2,"children":[]},{"title":"Global fields","slug":"global-fields","depth":2,"children":[],"tabId":"global"},{"title":"What an Allow row does","slug":"what-an-allow-row-does","depth":2,"children":[],"tabId":"allow"},{"title":"Row fields","slug":"row-fields","depth":2,"children":[],"tabId":"allow"},{"title":"What a Deny row does","slug":"what-a-deny-row-does","depth":2,"children":[],"tabId":"deny"},{"title":"What an Insert row does","slug":"what-an-insert-row-does","depth":2,"children":[],"tabId":"insert"},{"title":"Content-Security-Policy tiers","slug":"content-security-policy-tiers","depth":2,"children":[],"tabId":"insert"},{"title":"View headers","slug":"view-headers","depth":2,"children":[],"tabId":"view-headers"},{"title":"Examples","slug":"examples","depth":2,"children":[{"title":"Strip Referer on all users except marketing","slug":"strip-referer-on-all-users-except-marketing","depth":3,"children":[]},{"title":"Insert a custom request header","slug":"insert-a-custom-request-header","depth":3,"children":[]},{"title":"Enforce a Content-Security-Policy correctly","slug":"enforce-a-content-security-policy-correctly","depth":3,"children":[]},{"title":"Allow everything, hide the server banner","slug":"allow-everything-hide-the-server-banner","depth":3,"children":[]}]},{"title":"How to verify","slug":"how-to-verify","depth":2,"children":[]},{"title":"Next steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"safe-squid-labs-12a0916f","siteName":"SafeSquid Documentation","title":"Header filter - SafeSquid Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-08T15:49:32.611Z","originalFileLocation":"configuration/restriction_policies/privacy_control/header_filter.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Strip or inject HTTP headers on client requests and server responses using global, allow, deny, and insert rules.\">\u003cmeta data-mint-head name=\"application-name\" content=\"SafeSquid Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/safe-squid-labs-12a0916f/dNzFC4OIOBxe5Jm_/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/safe-squid-labs-12a0916f/dNzFC4OIOBxe5Jm_/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/safe-squid-labs-12a0916f/dNzFC4OIOBxe5Jm_/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/safe-squid-labs-12a0916f/dNzFC4OIOBxe5Jm_/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/safe-squid-labs-12a0916f/dNzFC4OIOBxe5Jm_/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/safe-squid-labs-12a0916f/dNzFC4OIOBxe5Jm_/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/safe-squid-labs-12a0916f/dNzFC4OIOBxe5Jm_/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/safe-squid-labs-12a0916f/dNzFC4OIOBxe5Jm_/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/safe-squid-labs-12a0916f/dNzFC4OIOBxe5Jm_/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Header filter - SafeSquid Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Strip or inject HTTP headers on client requests and server responses using global, allow, deny, and insert rules.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"SafeSquid Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.safesquid.com/configuration/restriction_policies/privacy_control/header_filter\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://safe-squid-labs-12a0916f.mintlify.site/_mintlify/api/og/v2?division=Privacy+control\u0026amp;title=Header+filter\u0026amp;description=Strip+or+inject+HTTP+headers+on+client+requests+and+server+responses+using+global%2C+allow%2C+deny%2C+and+insert+rules.\u0026amp;theme=4ec1e09f5eab69716f172ff1\u0026amp;signature=5e52b71cb25520381e2193de7fcf66afa5e594828140c508a3d3d6c34221aafe\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Header filter - SafeSquid Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Strip or inject HTTP headers on client requests and server responses using global, allow, deny, and insert rules.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://safe-squid-labs-12a0916f.mintlify.site/_mintlify/api/og/v2?division=Privacy+control\u0026amp;title=Header+filter\u0026amp;description=Strip+or+inject+HTTP+headers+on+client+requests+and+server+responses+using+global%2C+allow%2C+deny%2C+and+insert+rules.\u0026amp;theme=4ec1e09f5eab69716f172ff1\u0026amp;signature=5e52b71cb25520381e2193de7fcf66afa5e594828140c508a3d3d6c34221aafe\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/safe-squid-labs-12a0916f/dNzFC4OIOBxe5Jm_/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"SafeSquid Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0066CC\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.safesquid.com/configuration/restriction_policies/privacy_control/header_filter\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/configuration/restriction_policies/privacy_control/header_filter.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.safesquid.com/#organization\",\"name\":\"SafeSquid Documentation\",\"url\":\"https://docs.safesquid.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/safe-squid-labs-12a0916f/WapkOaLV2w2WE_m9/images/logos/safesquid/safesquid-mark-blue.png?fit=max\u0026auto=format\u0026n=WapkOaLV2w2WE_m9\u0026q=85\u0026s=b7b9c81a4dfce86823f854d9510e5cec\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.safesquid.com#website\",\"name\":\"SafeSquid Documentation\",\"url\":\"https://docs.safesquid.com\",\"publisher\":{\"@id\":\"https://docs.safesquid.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.safesquid.com/configuration/restriction_policies/privacy_control/header_filter#webpage\",\"url\":\"https://docs.safesquid.com/configuration/restriction_policies/privacy_control/header_filter\",\"name\":\"Header filter\",\"description\":\"Strip or inject HTTP headers on client requests and server responses using global, allow, deny, and insert rules.\",\"dateModified\":\"2026-10-08T15:49:32.611Z\",\"isPartOf\":{\"@id\":\"https://docs.safesquid.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.safesquid.com/configuration/restriction_policies/privacy_control/header_filter#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.safesquid.com/configuration/restriction_policies/privacy_control/header_filter#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Restriction Policies\",\"item\":\"https://docs.safesquid.com/configuration/restriction_policies/privacy_control/cookie_filter\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Privacy control\",\"item\":\"https://docs.safesquid.com/configuration/restriction_policies/privacy_control/cookie_filter\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Header filter\",\"item\":\"https://docs.safesquid.com/configuration/restriction_policies/privacy_control/header_filter\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.safesquid.com/configuration/restriction_policies/privacy_control/header_filter#article\",\"headline\":\"Header filter\",\"name\":\"Header filter\",\"description\":\"Strip or inject HTTP headers on client requests and server responses using global, allow, deny, and insert rules.\",\"url\":\"https://docs.safesquid.com/configuration/restriction_policies/privacy_control/header_filter\",\"mainEntityOfPage\":{\"@id\":\"https://docs.safesquid.com/configuration/restriction_policies/privacy_control/header_filter#webpage\"},\"dateModified\":\"2026-10-08T15:49:32.611Z\",\"keywords\":\"header filter, HTTP header filtering, privacy control header filter, SafeSquid header rules\",\"publisher\":{\"@id\":\"https://docs.safesquid.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.safesquid.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"SafeSquid Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"SafeSquid Documentation","nav":{"global":{"languages":[{"language":"en","default":true,"href":"/getting_started/welcome"},{"language":"es","href":"/?lang=es"}],"versions":[{"version":"v2026.0312.1923","default":true,"href":"/getting_started/welcome"},{"version":"v2024.0315.1413","href":"/?version=legacy"}]},"tabs":[{"tab":"Get Started","icon":"compass","pages":[{"title":"Get Started","href":"/getting_started/welcome"}]},{"tab":"Architecture","icon":"sitemap","pages":[{"title":"Architecture","href":"/architecture/application_ecosystem/main"}]},{"tab":"Deployment","icon":"server","pages":[{"title":"Deployment","href":"/deployment/licensing_requirements"}]},{"tab":"Configuration","icon":"sliders","groups":[{"group":"Administration Basics","pages":[{"title":"First configuration","href":"/configuration/start_here/first_configuration"},{"title":"Architecture and request pipeline","href":"/configuration/start_here/architecture"},{"title":"SafeSquid daemon","href":"/configuration/start_here/daemon"},{"title":"Authentication","href":"/configuration/start_here/authentication"},{"title":"Debug response headers","href":"/configuration/start_here/debug_response_headers"},{"title":"startup.ini tunables","href":"/configuration/start_here/startup_ini"},{"title":"Cloud / categorisation feeds","href":"/configuration/start_here/cloud_feeds"},{"title":"Integrations","href":"/configuration/start_here/integrations"}]},{"group":"Licensing and Self-Service Portal","pages":[{"title":"Subscription","href":"/configuration/infrastructure_and_access/subscription"},{"title":"Support","href":"/configuration/infrastructure_and_access/support"}]},{"group":"Application Setup","pages":[{"title":"Network settings","href":"/configuration/application_setup/network_settings_and_listeners"},{"title":"Integrate LDAP","href":"/configuration/application_setup/integrate_ldap"},{"title":"Access restrictions","href":"/configuration/application_setup/access_restrictions"},{"group":"Accelerators","expanded":false,"pages":[{"title":"Caching","href":"/configuration/application_setup/accelerators/caching"},{"title":"Prefetching","href":"/configuration/application_setup/accelerators/prefetching"}]},{"title":"System configuration","href":"/configuration/application_setup/system_configuration"},{"title":"Proxy chain","href":"/configuration/application_setup/proxy_chain"},{"title":"FTP browsing","href":"/configuration/application_setup/ftp_browsing"},{"title":"WCCP","href":"/configuration/application_setup/wccp"},{"title":"SSqore","href":"/configuration/application_setup/ssqore"}]},{"group":"Real Time Content Security","pages":[{"title":"HTTPS inspection","href":"/configuration/real_time_content_security/https_inspection"},{"title":"Clam antivirus","href":"/configuration/real_time_content_security/clam_antivirus"},{"title":"Text analyzer","href":"/configuration/real_time_content_security/text_analyzer"},{"title":"Redirect","href":"/configuration/real_time_content_security/redirect"},{"title":"DNS Blacklist","href":"/configuration/real_time_content_security/dns_blacklist"},{"title":"Image analyzer","href":"/configuration/real_time_content_security/image_analyzer"},{"title":"Content modifier","href":"/configuration/real_time_content_security/content_modifier"},{"title":"DLP","href":"/configuration/real_time_content_security/dlp"},{"title":"ICAP","href":"/configuration/real_time_content_security/icap"},{"title":"SqScan","href":"/configuration/real_time_content_security/sqscan"}]},{"group":"Custom Settings","pages":[{"title":"Categorize Web-Sites","href":"/configuration/custom_settings/categorize_web_sites"},{"title":"Time Profiler","href":"/configuration/custom_settings/time_profiler"},{"title":"Response Types","href":"/configuration/custom_settings/response_types"},{"title":"Request Types","href":"/configuration/custom_settings/request_types"},{"title":"Templates","href":"/configuration/custom_settings/templates"},{"title":"External applications","href":"/configuration/custom_settings/external_applications"},{"title":"Application Signatures","href":"/configuration/custom_settings/application_signatures"},{"title":"Content Signatures","href":"/configuration/custom_settings/content_signatures"},{"title":"Suggested Profiles","href":"/configuration/custom_settings/suggested_profiles"}]},{"group":"Restriction Policies","pages":[{"group":"Privacy control","expanded":false,"pages":[{"title":"Cookie filter","description":"Control which HTTP cookies pass between clients and servers using a global policy plus allow and deny override lists.","href":"/configuration/restriction_policies/privacy_control/cookie_filter"},{"title":"Header filter","href":"/configuration/restriction_policies/privacy_control/header_filter"},{"title":"Elevated Privacy","description":"Reduce cross-site tracking by stripping third-party cookies and selected tracking headers.","href":"/configuration/restriction_policies/privacy_control/elevated_privacy"}]},{"title":"Access Profiles","href":"/configuration/restriction_policies/access_profiles"},{"title":"Speed Limits","href":"/configuration/restriction_policies/speed_limits"}]}]},{"tab":"Use Cases","icon":"lightbulb","pages":[{"title":"Use Cases","href":"/use_cases/use_cases"}]},{"tab":"Reporting","icon":"chart-line","pages":[{"title":"Reporting","href":"/reporting/reporting"}]},{"tab":"Troubleshooting","icon":"wrench","pages":[{"title":"Troubleshooting","href":"/troubleshooting/troubleshooting"}]},{"tab":"FAQs","icon":"circle-question","pages":[{"title":"FAQs","href":"/faqs/faqs"}]}]},"basePath":"","title":"Header filter - SafeSquid Documentation","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["10e4515597","07c022d89b","a74be98ba7"],"chunks":["BannerMarkdown-Cj6eAYhz.js","dist-CdrJecqK.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-D-TRO5q5.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","Frame-DvzxQbD0.js","DynamicMarkdown-mQG_iQiE.js","zoom-image-lightbox-BFbLClTf.js","lightbox-handle-r17bVUz3.js"]}