{
  "slug": "http-headers-diff",
  "name": "gizza-ai/http-headers-diff",
  "version": "0.1.0",
  "title": "HTTP Headers Diff — compare two sets of response headers — gizza.ai",
  "description": "Compare two sets of HTTP headers and see what changed: headers added, removed and changed, with case-insensitive names and noise-header ignore. Runs in your browser.",
  "tags": [
    "http headers diff",
    "compare http headers",
    "header diff",
    "response header compare",
    "diff headers online",
    "security headers diff",
    "compare response headers",
    "http header compare"
  ],
  "category": "network",
  "urls": {
    "page": "https://gizza.ai/tools/http-headers-diff/",
    "markdown": "https://gizza.ai/tools/http-headers-diff/index.md",
    "descriptor": "https://gizza.ai/tools/http-headers-diff/tool.json",
    "deep_link_example": "https://gizza.ai/tools/http-headers-diff/?left=HTTP%2F1.1%20200%20OK%0AContent-Type%3A%20text%2Fhtml%0AServer%3A%20nginx%0ACache-Control%3A%20max-age%3D60%0AX-Frame-Options%3A%20DENY&right=HTTP%2F2%20200%0AContent-Type%3A%20application%2Fjson%0AServer%3A%20nginx%0ACache-Control%3A%20no-cache%0AContent-Security-Policy%3A%20default-src%20%27self%27&ignore=Date%2C%20Age%2C%20Report-To&ignore_order=true&output=report"
  },
  "cli": "gizza tool http-headers-diff \"HTTP/1.1 200 OK\nContent-Type: text/html\nServer: nginx\nCache-Control: max-age=60\nX-Frame-Options: DENY\" 'right=HTTP/2 200\nContent-Type: application/json\nServer: nginx\nCache-Control: no-cache\nContent-Security-Policy: default-src 'self''",
  "tool": {
    "description": "Compare two sets of HTTP headers and report what changed. Pass the first (old/base) header block in `left` and the second (new/compared) block in `right`, each as one 'Name: value' per line; an optional leading request/status line (GET / HTTP/1.1, HTTP/1.1 200 OK) is skipped. Following HTTP semantics, header names are matched case-insensitively (shown in canonical Title-Case) and repeated headers are combined into one value (Set-Cookie kept per-line, never comma-joined). The tool reports headers added (only in `right`), removed (only in `left`), changed (in both with a different value, shown old -> new), and unchanged, with a count summary. Set `ignore` to a comma/space list of header names to exclude (e.g. volatile Date/Age). Set `ignore_order` to treat comma-list values (Vary, Cache-Control) as a set so reordering isn't flagged. `output` selects 'report' (default, grouped human summary) or 'json' (structured). Runs locally.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "ignore": {
          "default": "",
          "description": "Header names to exclude from the diff, separated by commas, spaces or newlines and matched case-insensitively — e.g. 'Date, Age, Report-To' to drop volatile/noise headers. Default empty (compare all headers).",
          "type": "string"
        },
        "ignore_order": {
          "default": false,
          "description": "For list-valued headers (Vary, Cache-Control, Accept, …), compare the comma-separated tokens as a set so a pure reordering isn't reported as a change. Default false (exact string compare).",
          "type": "boolean"
        },
        "left": {
          "description": "The first (old/base) set of HTTP headers, one 'Name: value' per line. An optional leading request or status line (e.g. 'GET / HTTP/1.1' or 'HTTP/1.1 200 OK') is skipped, not diffed. Header names are matched case-insensitively; repeated headers are combined (Set-Cookie kept per-line); CRLF, folded continuation lines, and a blank line ending the block are accepted.",
          "type": "string"
        },
        "output": {
          "default": "report",
          "description": "Output form: 'report' (default) a grouped human summary with Added/Removed/Changed/Unchanged sections and counts; 'json' a structured object { summary, added, removed, changed, unchanged }.",
          "enum": [
            "report",
            "json"
          ],
          "type": "string"
        },
        "right": {
          "description": "The second (new/compared) set of HTTP headers, in the same format as `left`. Headers only in `right` are reported as added, headers only in `left` as removed, and headers in both with a different value as changed (old -> new).",
          "type": "string"
        }
      },
      "required": [
        "left",
        "right"
      ],
      "type": "object"
    }
  }
}