HTTP Message Parser

Paste a raw HTTP/1.x request or response and decode the start line (method/target or status/reason), the HTTP version, every header in order (duplicates preserved), Content-Type / Content-Length, and the body. Request vs response is detected automatically. Runs in your browser; nothing is uploaded.

Parsed message

About this tool

HTTP Message Parser decodes a raw HTTP/1.x message — a request or a response — into its structured parts:

Request vs response is detected automatically: a status line starts with HTTP/, a request line ends with it. Both CRLF and bare-LF line endings are accepted, so you can paste a message copied from logs or an editor that normalised the newlines.

Example

GET /search?q=cats&page=2 HTTP/1.1
Host: example.com
Accept: text/html
Accept-Language: en-US

decodes to method GET, path /search, query q=cats&page=2, three headers, and an empty body.

Common uses

FAQ

How does it know whether I pasted a request or a response?

By the first token of the start line: a response begins with the version (HTTP/1.1 200 OK), while a request ends with it (GET / HTTP/1.1). The detection is automatic, and a start line that fits neither shape is reported as an error rather than parsed into nonsense.

Are repeated headers like Set-Cookie collapsed together?

No — every header line is kept in wire order with duplicates preserved, so three Set-Cookie lines show up as three entries. Obsolete line-folded headers (a continuation line starting with a space) are the one exception: they're joined back onto the header they continue, per the HTTP spec.

Do I need real CRLF line endings?

No. Both CRLF and bare LF are accepted, so a message copied from a log file, editor or terminal that normalised the newlines parses fine. The head/body boundary is the first blank line either way.

Does it decode a chunked or gzip-encoded body?

It reports the raw body after the blank line and flags when Transfer-Encoding: chunked is present, but it does not de-chunk or decompress the payload — you get the bytes exactly as pasted, plus the parsed Content-Type and Content-Length for reference.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool parse-http-message "GET /index.html?q=1 HTTP/1.1
Host: example.com
Accept: */*

"

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/parse-http-message/?message=GET%20%2Findex.html%3Fq%3D1%20HTTP%2F1.1%0AHost%3A%20example.com%0AAccept%3A%20%2A%2F%2A%0A%0A

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.