Yoryantra
← Back to Tools

HTTP Header Diff Checker

Compare HTTP header sets while preserving case-insensitive names, repeated fields, malformed lines, and redaction needs.

Added, removed, changed and unchanged HTTP fields will appear here with repeated-value and malformed-line details.
Comparison runs on the pasted header text in your browser. The tool does not request either URL or reproduce intermediary/proxy behavior. Site-wide analytics or advertising scripts, if enabled, are separate from the comparison operation.

HTTP Field Names Ignore Case; Your Diff Tool Should Too

RFC 9110 defines HTTP field names as case-insensitive. content-type, Content-Type and CONTENT-TYPE therefore identify the same field name in HTTP semantics. Treating capitalization alone as a deployment change produces noisy diffs.

Yoryantra normalizes the comparison key to lowercase while keeping a readable display name. HTTP/2 and HTTP/3 pseudo-fields such as :status are handled separately because their syntax is not an ordinary HTTP field line.

Repeated Field Lines Are Data, Not Formatting Noise

HTTP permits many fields to be repeated, and RFC 9110 generally defines combination by preserving the order of field-line values. A diff that converts every field into one dictionary string before comparison can lose that evidence.

Every parsed field line stays in source order. If the before response contains two Warning lines and the after response reverses or changes them, that remains visible instead of being flattened away.

Set-Cookie Is the Classic Reason “Just Join Duplicates With a Comma” Is Dangerous

Set-Cookie commonly appears once per cookie and its syntax includes commas in places where generic list combination is unsafe. HTTP specifications call out Set-Cookie as a field that does not follow the ordinary combination model.

The checker therefore preserves each Set-Cookie line independently. Sensitive redaction is on by default so session identifiers do not leak into screenshots or copied comparison reports.

Whitespace Around a Field Value Is Different From Whitespace Inside the Value

HTTP syntax permits optional whitespace around field values in serialized messages. A proxy might emit Cache-Control: no-cache while another emits spacing around the same value. That surrounding whitespace is removed by the parser before comparison.

Internal characters are preserved. The comparison does not reorder CSP directives, split Cache-Control tokens, normalize media types, sort Vary values, or reinterpret each registered field's grammar. Those transformations could incorrectly turn a real semantic change into “same.”

obs-fold Is Historical Input You May Still Encounter, Not Something New Servers Should Emit

Older HTTP syntax allowed continuation lines beginning with space or tab. Modern HTTP treats that obsolete folding syntax as something recipients must handle cautiously rather than something senders should produce.

When the pasted capture contains an indented continuation, this checker unfolds it into the preceding value and reports that it did so. That preserves useful debugging evidence without recommending obs-fold as valid modern output.

A Changed Header Is an Observation; the Cause May Live in a Different Layer

If Server changes from Nginx to Cloudflare, your origin software may not have changed at all—the edge may be replacing the field. A new Age header can indicate cache reuse. A changed Content-Length may be compression, templating, minification or a genuinely different payload.

Header diffs are strongest when paired with the deployment event: CDN rule, reverse-proxy change, framework release, cache-policy update, security-header rollout, API version or origin migration.

Cache-Control Changes Need the Whole Cache Story

Moving from no-cache to public, max-age=3600 is obviously important, but the effective cache behavior can also depend on shared-cache directives, Vary, validators, Age, CDN configuration, authenticated responses, request headers and application-specific surrogate controls.

Use the diff to find the change. Then test representative requests through the actual browser/CDN/origin path before deciding the cache behavior is correct.

Security-Header Diffs Need Behavior Testing, Not “More Headers = Better”

Adding CSP, HSTS or Permissions-Policy can be a security improvement; a misconfigured value can also block scripts, embeds, authentication popups, API connections or whole subdomains. Removing X-Frame-Options might be acceptable when a stronger equivalent frame-ancestors policy is enforced.

The checker flags policy changes so they get deliberate review. It does not assign security meaning simply from added/removed counts.

Volatile Fields Are Optional Noise Suppression, Not “Unimportant Headers”

Date, Age, request IDs and tracing fields often differ on every request. Hiding them can make a before/after deployment diff easier to read. But those fields can be exactly what you need when diagnosing cache residency, request routing or distributed tracing.

The ignore option is therefore explicit and off by default. When enabled, the report lists which present fields were intentionally omitted.

RFC 9110: HTTP Semantics is the useful baseline for field-name case-insensitivity, repeated field lines, field order and the general HTTP field model. Protocol version framing details belong to the relevant HTTP/1.1, HTTP/2 or HTTP/3 specification rather than a generic text diff.