Nondeterministic Palindrome Machine
    Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

    http-headerspublic

    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

    install

    npm i http-headers

    Downloadsweekly downloads

    13,654

    version

    3.0.2

    license

    MIT

    repository

    githubgithub

    last publish

    collaborators

    • avatar