Skip to content

watson/http-headers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

http-headers

Build status js-standard-style

Parse the start-line and headers from an HTTP request or reponse.

Converts:

HTTP/1.1 200 OK
Date: Tue, 10 Jun 2014 07:19:27 GMT
Connection: keep-alive
Transfer-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 = 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)

http.ServerReponse support

If given an instance of http.ServerResponse, the reponse headers is automatically extracted, parsed and returned:

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 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:

httpHeaders(data[, onlyHeaders])

Arguments:

  • data - A string, buffer or instance of http.ServerReponse
  • onlyHeaders - An optional boolean. If true, only the headers object will be returned. Defaults to false

Request example

If given a request as input:

GET /foo HTTP/1.1
Date: Tue, 10 Jun 2014 07:19:27 GMT
Connection: keep-alive
Transfer-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 OK
Date: Tue, 10 Jun 2014 07:19:27 GMT
Connection: keep-alive
Transfer-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 GMT
Connection: keep-alive
Transfer-Encoding: chunked

Hello World

Returns:

{
  date: 'Tue, 10 Jun 2014 07:19:27 GMT',
  connection: 'keep-alive',
  'transfer-encoding': 'chunked'
}

License

MIT

About

HTTP header string parser

Resources

License

Stars

Watchers

Forks

Packages

No packages published