http-headers
Parse the start-line and headers from an HTTP request or reponse.
Converts:
HTTP/1.1 200 OKDate: Tue, 10 Jun 2014 07:19:27 GMTConnection: keep-aliveTransfer-Encoding: chunked Hello World
To this:
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
Installation
npm install http-headers --save
Usage
var net = var httpHeaders = // create TCP servernet
http.ServerReponse
support
If given an instance of http.ServerResponse
, the reponse headers is
automatically extracted, parsed and returned:
var http = var httpHeaders = http
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 not
as easy as with the http.IncomingMessage
headers (which you just
access via request.headers['content-type']
).
Response headers are not directly available on the response
object.
Instead all headers are preprocessed as a string on the private
response._header
property and needs to be processed in order to be
available as an object.
This module makes the task super simple.
API
The http-headers module exposes a single parser function:
Arguments:
data
- A string, buffer or instance ofhttp.ServerReponse
onlyHeaders
- An optional boolean. Iftrue
, only the headers object will be returned. Defaults tofalse
Request example
If given a request as input:
GET /foo HTTP/1.1Date: Tue, 10 Jun 2014 07:19:27 GMTConnection: keep-aliveTransfer-Encoding: chunked Hello World
Returns:
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'
Response example
If given a request as input:
HTTP/1.1 200 OKDate: Tue, 10 Jun 2014 07:19:27 GMTConnection: keep-aliveTransfer-Encoding: chunked Hello World
Returns:
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'
onlyHeaders
example
If the optional second argument is set to true
, only headers are
returned no matter the type of input:
date: 'Tue, 10 Jun 2014 07:19:27 GMT' connection: 'keep-alive' 'transfer-encoding': 'chunked'
No Start-Line
If the data
given does not contain an HTTP Start-Line, only the
headers are returned, even if the onlyHeaders
argument is false
:
Date: Tue, 10 Jun 2014 07:19:27 GMTConnection: keep-aliveTransfer-Encoding: chunked Hello World
Returns:
date: 'Tue, 10 Jun 2014 07:19:27 GMT' connection: 'keep-alive' 'transfer-encoding': 'chunked'
License
MIT