JSPM

  • Created
  • Published
  • Downloads 29341
  • Score
    100M100P100Q138457F
  • License MIT

Package Exports

  • http2-proxy

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (http2-proxy) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

node-http2-proxy

A simple high performance http/2 & http/1.1 to http/1.1 spec compliant proxy helper for Node.

Features

Installation

$ npm install http2-proxy

Notes

http2-proxy requires node v8.5.0 or newer with http2 enabled. Pass the --expose-http2 option when starting node v8.x.x.

Usage

You must pass allowHTTP1: true to the http2.createServer or http2.createSecureServer factory methods.

import http2 from 'http2'
import proxy from 'http2-proxy'

const server = http2.createServer({ allowHTTP1: true })
server.listen(8000)

Proxy HTTP 1.1/2 and WebSocket

server.on('request', (req, res) => {
  proxy.web(req, res, {
    hostname: 'localhost'
    port: 9000
  }, err => {
    if (err) {
      console.error('proxy error', err)
    }
  })
})
server.on('upgrade', (req, socket, head) => {
  proxy.ws(req, socket, head, {
    hostname: 'localhost'
    port: 9000
  }, err => {
    if (err) {
      console.error('proxy error', err)
    }
  })
})

Use Helmet to secure response headers

server.on('request', (req, res) => {
  proxy.web(req, res, {
    hostname: 'localhost'
    port: 9000,
    onRes: (req, res) => helmet(req, res, () => {})
  }, err => {
    if (err) {
      console.error('proxy error', err)
    }
  })
})

Add x-forwarded headers

server.on('request', (req, res) => {
  proxy.web(req, res, {
    hostname: 'localhost'
    port: 9000,
    onReq: (req, { headers }) => {
      headers['x-forwarded-for'] = req.socket.remoteAddress
      headers['x-forwarded-proto'] = req.socket.encrypted ? 'https' : 'http'
      headers['x-forwarded-host'] = req.headers['host']
    }
  }, err => {
    if (err) {
      console.error('proxy error', err)
    }
  })
})

API

web (req, res, options, [callback])

Returns a promise if no callback is provided.

See request

ws (req, socket, head, options, [callback])

Returns a promise if no callback is provided.

See upgrade

Options

License

MIT