forwarded-http
v0.3.0
Published
Resolves RFC 7239 / Forwarded HTTP Extension, with fallback to all legacy & special Forward headers: `X-Forwarded-*`, `X-Real-*` and others
Downloads
311
Maintainers
Readme
Forwarded HTTP
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.
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.