Skip to content

fix: filter browser metadata headers from proxy recordings#2357

Merged
joelrosario merged 4 commits intomainfrom
codex/filter-browser-metadata-headers
Mar 22, 2026
Merged

fix: filter browser metadata headers from proxy recordings#2357
joelrosario merged 4 commits intomainfrom
codex/filter-browser-metadata-headers

Conversation

@nashjain
Copy link
Copy Markdown
Contributor

What:

Filter browser-generated metadata headers out of proxy-recorded contracts and stubs so recordings are portable across browsers.

Why:

Proxy recordings made from Chromium-based browsers could capture browser-specific request metadata such as Sec-CH-UA*. Those headers were then recorded as mandatory headers, which caused replay failures when the generated mock was used from a different browser such as Safari.

How:

  • Extend request transport-header filtering to exclude browser metadata by prefix for Sec-CH-* and Sec-Fetch-* headers.
  • Add Save-Data and Priority to the request transport-header exclusion set.
  • Restore common excluded transport headers for both request and response filtering so shared transport headers like Transfer-Encoding are filtered consistently.
  • Add regression coverage for request cleanup and proxy-recorded artifacts.

Checklist:

  • Unit Tests
  • Build passing locally
  • Sonar Quality Gate
  • Security scans don't report any vulnerabilities
  • Documentation added/updated (share link) N/A
  • Sample Project added/updated (share link) N/A
  • Demo video (share link) N/A
  • Article on Website (share link) N/A
  • Roadmpap updated (share link) N/A
  • Conference Talk (share link) N/A

Validated locally with:

  • ./gradlew :specmatic-core:test --tests "io.specmatic.core.HttpRequestTest"
  • ./gradlew :specmatic-core:test --tests "io.specmatic.core.HttpResponseTest"
  • ./gradlew :specmatic-core:test --tests "io.specmatic.proxy.ProxyTest"

Issue ID:
Closes: N/A

@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 22, 2026

Summary

Line coverage Branch coverage

Assembly Line coverage Branch coverage
application 64.9% 58.6%
application/backwardCompatibility 79.5% 65.1%
application/mcp 84.7% 76.9%
application/validate 1.2% 2.5%
io/specmatic/conversions 93.4% 78.4%
io/specmatic/conversions/lenient 97.6% 77.4%
io/specmatic/core 81.3% 62.8%
io/specmatic/core/azure 0% 0%
io/specmatic/core/config 61.6% 39.4%
io/specmatic/core/config/v1 97.9% 25%
io/specmatic/core/config/v2 91.9% 78.8%
io/specmatic/core/config/v3 56.7% 30.2%
io/specmatic/core/config/v3/components 78.9% 40%
io/specmatic/core/config/v3/components/runOptions 75.4% 47.5%
io/specmatic/core/config/v3/components/services 89.8% 59%
io/specmatic/core/config/v3/components/settings 100% 63.8%
io/specmatic/core/config/v3/components/sources 83.8% 61.5%
io/specmatic/core/config/v3/specmatic 57.6% 25%
io/specmatic/core/discriminator 52.6% 50%
io/specmatic/core/examples/module 45.7% 28.9%
io/specmatic/core/examples/server 73.8% 36.8%
io/specmatic/core/examples/source 91.6% 60%
io/specmatic/core/filters 83.9% 72.1%
io/specmatic/core/fuzzy 97.3% 93.8%
io/specmatic/core/git 9% 10.8%
io/specmatic/core/jsonoperator 68.3% 70.5%
io/specmatic/core/jsonoperator/value 86.2% 74.4%
io/specmatic/core/lifecycle 0% ****
io/specmatic/core/log 76.2% 62.3%
io/specmatic/core/matchers 86.9% 76.8%
io/specmatic/core/overlay 87.3% 58.8%
io/specmatic/core/pattern 87.5% 77.1%
io/specmatic/core/pattern/config 100% ****
io/specmatic/core/pattern/regex 94.5% 87.5%
io/specmatic/core/report 97.5% 91.6%
io/specmatic/core/route/modules 95% 87.5%
io/specmatic/core/utilities 70.3% 62.1%
io/specmatic/core/value 82.3% 69%
io/specmatic/core/wsdl/parser 81.4% 41%
io/specmatic/core/wsdl/parser/message 90% 72%
io/specmatic/core/wsdl/parser/operation 100% 100%
io/specmatic/core/wsdl/payload 81.1% 50%
io/specmatic/junit5/support 0% ****
io/specmatic/loader 84.6% 53.5%
io/specmatic/mcp/constants 0% ****
io/specmatic/mcp/report 0% 0%
io/specmatic/mcp/test 0% 0%
io/specmatic/mcp/test/client 0% 0%
io/specmatic/mcp/test/client/model 0% 0%
io/specmatic/mock 61.7% 56.5%
io/specmatic/proxy 67% 52%
io/specmatic/specmatic/core 100% ****
io/specmatic/specmatic/executable 100% ****
io/specmatic/specmatic/mcp 0% ****
io/specmatic/stub 79.3% 69.1%
io/specmatic/stub/listener 100% 100%
io/specmatic/stub/report 100% 77%
io/specmatic/test 74.2% 63.6%
io/specmatic/test/asserts 95.2% 86.6%
io/specmatic/test/handlers 89.7% 63.3%
io/specmatic/test/listeners 86.4% 53.2%
io/specmatic/test/reports 60% 33.3%
io/specmatic/test/reports/coverage 97.6% 55.1%
io/specmatic/test/reports/coverage/console 90.9% 82.7%
io/specmatic/test/reports/coverage/html 0% 0%
io/specmatic/test/reports/renderers 20% 24.1%
io/specmatic/test/utils 92.3% 80%

@joelrosario joelrosario merged commit 35638a1 into main Mar 22, 2026
3 checks passed
@joelrosario joelrosario deleted the codex/filter-browser-metadata-headers branch March 22, 2026 11:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants