SAP-BTP-Spielwiese/app1/node_modules/http-headers/README.md

206 lines
4 KiB
Markdown
Raw Normal View History

# http-headers
[![Build status](https://travis-ci.org/watson/http-headers.svg?branch=master)](https://travis-ci.org/watson/http-headers)
[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://github.com/feross/standard)
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](http://www.rfc-base.org/txt/rfc-2068.txt) compliant
(please [open an issue](https://github.com/watson/http-headers/issues)
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
```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)
```
### `http.ServerReponse` support
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 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:
```js
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:
```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'
}
}
```
### Response example
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'
}
}
```
### `onlyHeaders` example
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'
}
```
### 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`:
```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'
}
```
## License
MIT