Parse http headers
npm install http-headers

Parse the start-line and headers from an HTTP request or reponse.
Converts:
``http
HTTP/1.1 200 OK
Date: Tue, 10 Jun 2014 07:19:27 GMT
Connection: keep-alive
Transfer-Encoding: chunked
Hello World
`
To this:
`js`
{
version: { major: 1, minor: 1 },
statusCode: 200,
statusMessage: 'OK',
headers: {
date: 'Tue, 10 Jun 2014 07:19:27 GMT',
connection: 'keep-alive',
'transfer-encoding': 'chunked'
}
}
Features:
- Auto-detects and ignores body if present
- Fully RFC 2068 compliant
(please open an issue
if you find a discrepancy)
- Support multi-line headers (lines will be joined with a space)
- Support repeating headers
``
npm install http-headers --save
`js
var net = require('net')
var httpHeaders = require('http-headers')
// create TCP server
net.createServer(function (c) {
var buffers = []
c.on('data', buffers.push.bind(buffers))
c.on('end', function () {
var data = Buffer.concat(buffers)
// parse incoming data as an HTTP request and extra HTTP headers
console.log(httpHeaders(data))
})
}).listen(8080)
`
If given an instance of http.ServerResponse, the reponse headers is
automatically extracted, parsed and returned:
`js
var http = require('http')
var httpHeaders = require('http-headers')
http.createServer(function (req, res) {
res.end('Hello World')
console.log(httpHeaders(res))
}).listen(8080)
`
#### Why?
If you've ever needed to log or in another way access the headers sent
to the client on a http.ServerResponse in Node.js, you know it's nothttp.IncomingMessage
as easy as with the headers (which you justrequest.headers['content-type']
access via ).
Response headers are not directly available on the response object.response._header
Instead all headers are preprocessed as a string on the private property and needs to be processed in order to be
available as an object.
This module makes the task super simple.
The http-headers module exposes a single parser function:
`js`
httpHeaders(data[, onlyHeaders])
Arguments:
- data - A string, buffer or instance of http.ServerReponseonlyHeaders
- - An optional boolean. If true, only the headersfalse
object will be returned. Defaults to
If given a request as input:
`http
GET /foo HTTP/1.1
Date: Tue, 10 Jun 2014 07:19:27 GMT
Connection: keep-alive
Transfer-Encoding: chunked
Hello World
`
Returns:
`js`
{
method: 'GET',
url: '/foo',
version: { major: 1, minor: 1 },
headers: {
date: 'Tue, 10 Jun 2014 07:19:27 GMT',
connection: 'keep-alive',
'transfer-encoding': 'chunked'
}
}
If given a request as input:
`http
HTTP/1.1 200 OK
Date: Tue, 10 Jun 2014 07:19:27 GMT
Connection: keep-alive
Transfer-Encoding: chunked
Hello World
`
Returns:
`js`
{
version: { major: 1, minor: 1 },
statusCode: 200,
statusMessage: 'OK',
headers: {
date: 'Tue, 10 Jun 2014 07:19:27 GMT',
connection: 'keep-alive',
'transfer-encoding': 'chunked'
}
}
If the optional second argument is set to true, only headers are
returned no matter the type of input:
`js`
{
date: 'Tue, 10 Jun 2014 07:19:27 GMT',
connection: 'keep-alive',
'transfer-encoding': 'chunked'
}
If the data given does not contain an HTTP Start-Line, only theonlyHeaders
headers are returned, even if the argument is false:
`http
Date: Tue, 10 Jun 2014 07:19:27 GMT
Connection: keep-alive
Transfer-Encoding: chunked
Hello World
`
Returns:
`js``
{
date: 'Tue, 10 Jun 2014 07:19:27 GMT',
connection: 'keep-alive',
'transfer-encoding': 'chunked'
}
MIT