An HTTP header decoder parses a raw HTTP request or response — the start line, the header block and the body — into labelled fields, making a captured or logged message readable.
Example
POST /api/v1/decode HTTP/1.1
Host: decoder.tools
Content-Type: application/json
Authorization: Bearer abc
{"input":"..."}— body —
{"input":"..."}
Start line: POST /api/v1/decode HTTP/1.1
Host: decoder.tools
Content-Type: application/json
Authorization: Bearer abcWhat is the HTTP Request / Response Decoder?
An HTTP/1.1 message is text: a start line (method, path and version for a request; version, status code and reason for a response), then one header per line, then a blank line, then the body. Header names are case-insensitive, values are comma-separable, and the blank line is the only thing separating headers from content.
The headers that decide behaviour are a small set. Content-Type and Content-Length describe the body; Transfer-Encoding: chunked replaces the length with size-prefixed chunks; Cache-Control and ETag govern caching; Authorization and Cookie carry credentials; and the security headers — Strict-Transport-Security, Content-Security-Policy, X-Frame-Options — are usually what you're checking when you paste a response here.
HTTP/2 and HTTP/3 carry the same semantics in a binary, header-compressed form, so tools display them in this familiar text shape even though it is not what travels on the wire.
How to use the HTTP Request / Response Decoder
- Paste the raw request or response, including the start line and blank line.
- Read the parsed start line, header table and body.
- Check Content-Type, caching and security headers against what you expect.
When to use it
- Reviewing which security headers a response actually sets.
- Debugging a CORS or caching problem from a captured exchange.
- Reading an HTTP message out of a log or proxy dump.
HTTP Request / Response Decoder at a glance
| Structure | Start line, headers, blank line, body |
| Header names | Case-insensitive; values are not |
| Status classes | 2xx success · 3xx redirect · 4xx client · 5xx server |
| Body length | Content-Length, or Transfer-Encoding: chunked |
Frequently asked questions
What separates HTTP headers from the body?
A single blank line — CRLF CRLF. Everything before it is headers, everything after is the body.
Are HTTP header names case sensitive?
No, names are case-insensitive per the specification, and HTTP/2 requires them lowercase on the wire. Values generally are case sensitive.
What does Transfer-Encoding: chunked mean?
The body arrives in size-prefixed chunks terminated by a zero-length chunk, so the server can start sending before it knows the total length. Content-Length is absent in that case.
Last reviewed · found a mistake? contact@decoder.tools · view as markdown