/forwarded-http

Resolve RFC 7239 (Forwarded HTTP Extension), with fallback to all legacy & special Forward headers

Primary LanguageJavaScriptMIT LicenseMIT

Forwarded HTTP version License

Resolves RFC 7239 (Forwarded HTTP Extension), with fallback to all legacy & special Forward headers: X-Forwarded-*, X-Real-*, Fastly-Client-IP, X-Cluster-Client-IP, and others.

Focuses on resolving to the RFC standard and providing a consistent access to HTTP Forwarded Parameters: by, for, host, proto.

Filter valid IPv4 or IPv6 IPs against glob pattern, array, string, regexp or matcher function.

Use as Express Middleware to populate req.forwarded object.

Build Status Downloads Code Climate Coverage Status Dependencies

Install

npm install --save forwarded-http

API

forwarded(http.IncomingMessage[, options])

var forwarded = require('forwarded-http')

var params = forwarded(req)

// filter IP ranges
var filteredParams = forwarded(req, {
  filter: ['1.0.?.*', '2001:db8:*']
})

// don't list private IPs
var filteredParams = forwarded(req, {
  allowPrivate: false
})

.port

The final proxied port before hitting this server

var params = forwarded(req)

params.port // '8000'

.for

Oject with IPs as key with matching port used as value (if applicable)

var params = forwarded(req)

params.for // { '0.0.0.1': '8000', '0.0.0.2': '8001' }

.proto

The final proxied protocol before hitting this server

var params = forwarded(req)

params.proto // 'https'

.host

The proxied host

var params = forwarded(req)

arams.host // 'foo.com'

.ports

Array of ports the client is connected through

var params = forwarded(req)

params.ports // ['8000', '8001']

.ips

Array of IP addresses the client is connected through

var params = forwarded(req)

params.ips // ['0.0.0.1', '0.0.0.2']

Middleware

Use as Express Middleware to populate req.forwarded object.

forwarded([options])

var express = require('express')
var forwarded = require('forwarded-http/lib/middleware')

var app = express()

// use with default options
app.use(forwarded())

// or with options
app.use(forwarded(req, {
  filter: ['1.0.?.*', '2001:db8:*'],
  allowPrivate: false
})

Support

Donations are welcome to help support the continuous development of this project.

Gratipay PayPal Flattr Bitcoin

License

MIT © Ahmad Nassri