http2-proxy
Advanced tools
Comparing version 0.2.19 to 0.2.20
73
index.js
@@ -43,2 +43,3 @@ const http2 = require('http2') | ||
let hasError = false | ||
let proxyReq | ||
@@ -50,4 +51,12 @@ function onError (err, statusCode = err.statusCode || 500) { | ||
if (proxyReq && !proxyReq.aborted) { | ||
proxyReq.abort() | ||
} | ||
hasError = true | ||
if (!err.code) { | ||
err.code = resOrSocket.code | ||
} | ||
if (resOrSocket.closed === true || | ||
@@ -70,3 +79,3 @@ resOrSocket.headersSent !== false || | ||
req.on('error', onError) | ||
(req.stream || req).on('error', onError) | ||
resOrSocket.on('error', onError) | ||
@@ -89,9 +98,8 @@ | ||
if (proxyName && | ||
req.headers[HTTP2_HEADER_VIA] && | ||
req.headers[HTTP2_HEADER_VIA] | ||
.split(',') | ||
.some(name => sanitize(name).endsWith(proxyName.toLowerCase())) | ||
) { | ||
return onError(createError('loop detected', null, 508)) | ||
if (proxyName && req.headers[HTTP2_HEADER_VIA]) { | ||
for (const name of req.headers[HTTP2_HEADER_VIA].split(',')) { | ||
if (sanitize(name).endsWith(proxyName.toLowerCase())) { | ||
return onError(createError('loop detected', null, 508)) | ||
} | ||
} | ||
} | ||
@@ -134,21 +142,9 @@ | ||
return proxy(req, resOrSocket, options, onRes, onError) | ||
} | ||
proxyReq = http.request(options) | ||
function proxy (req, resOrSocket, options, onRes, onError) { | ||
const proxyReq = http.request(options) | ||
const abort = () => { | ||
if (!proxyReq.aborted) { | ||
proxyReq.abort() | ||
} | ||
} | ||
let hasError = false | ||
const onProxyError = err => { | ||
if (hasError) { | ||
if (proxyReq.aborted) { | ||
return | ||
} | ||
hasError = true | ||
proxyReq.abort() | ||
@@ -160,16 +156,25 @@ if (err.code === 'ECONNREFUSED' || err.code === 'ENOTFOUND') { | ||
} else if (err.code === 'ECONNRESET') { | ||
if (!proxyReq.aborted) { | ||
err.statusCode = 502 | ||
} else { | ||
return | ||
} | ||
err.statusCode = 502 | ||
} else { | ||
err.statusCode = 500 | ||
} | ||
req.removeListener('close', abort) | ||
abort() | ||
onError(err) | ||
} | ||
function onFinish () { | ||
if (!proxyReq.aborted) { | ||
proxyReq.abort() | ||
} | ||
} | ||
resOrSocket | ||
.on('finish', onFinish) | ||
.on('error', onFinish) | ||
.on('close', onFinish) | ||
req | ||
.on('close', abort) | ||
.on('aborted', onFinish) | ||
.on('error', onFinish) | ||
.on('close', onFinish) | ||
.pipe(proxyReq) | ||
@@ -296,5 +301,5 @@ .on('error', onProxyError) | ||
function setupHeaders (headers) { | ||
const connection = headers[HTTP2_HEADER_CONNECTION] | ||
const connection = sanitize(headers[HTTP2_HEADER_CONNECTION]) | ||
if (connection && connection !== 'close') { | ||
if (connection && connection !== 'close' && connection !== 'keep-alive') { | ||
for (const name of connection.split(',')) { | ||
@@ -318,3 +323,3 @@ delete headers[sanitize(name)] | ||
function sanitize (name) { | ||
return name.trim().toLowerCase() | ||
return name ? name.trim().toLowerCase() : '' | ||
} | ||
@@ -321,0 +326,0 @@ |
{ | ||
"name": "http2-proxy", | ||
"version": "0.2.19", | ||
"version": "0.2.20", | ||
"scripts": { | ||
@@ -5,0 +5,0 @@ "dev": "nodemon --inspect=9308 --expose-http2 src", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
15157
283