Haunting EPIPE errors
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 25/100
- Tipo di issue
- Bug
- Chiarezza
- Da chiarire
- Stato di attività
- Ferma
- Stack tecnologico
- javascript, node.js
- Ambito
- backend, networking
Direzione di ricerca
Inizia in web-incoming.js, in particolare nella gestione del socket di proxyReq e nei suoi metodi _write e _writev. Riproduci la risposta 401 di HAProxy con un corpo POST di grandi dimensioni e osserva il percorso EPIPE. Il lavoro è completato quando l'errore dell'upstream può raggiungere il client senza che l'istanza node-http-proxy venga arrestata o restituisca intermittentemente una risposta vuota.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Hello, I have node-http-proxy proxying HTTP POST requests with big payload (MBs) to upstream haproxy which upon 401 (Unauthorized) error responds early without reading the body and closes connection. This causes EPIPE error in node-http-proxy, no response is returned to the client and the whole node-http-proxy instance shuts down. I need to return the error from haproxy to the client.
I'm trying to ignore EPIPE errors by monkey-patching _write and _writev methods on proxyReq socket in web-incoming.js
...
// Enable developers to modify the proxyReq before headers are sent
proxyReq.on('socket', function(socket) {
const socketWriteOrig = socket._write;
socket._write = (data, encoding, callback) => {
return socketWriteOrig.call(socket, data, encoding, (err) => {
if(err && err.code == 'EPIPE') {
if(callback) callback();
return;
}
if(callback) callback(err); else throw err;
});
}
const socketWritevOrig = socket._writev;
socket._writev = (data, callback) => {
return socketWritevOrig.call(socket, data, (err) => {
if(err && err.code == 'EPIPE') {
if(callback) callback();
return;
}
if(callback) callback(err); else throw err;
});
}
if(server && !proxyReq.getHeader('expect')) {
server.emit('proxyReq', proxyReq, req, res, options);
}
});
...
This "patch" improves the behaviour of node-http-proxy a lot, but still I occasionally get empty response.
Any ideas how to handle EPIPE correctly or improve my "monkey-patch"?
Here is my node-http-proxy instance:
httpProxy
.createProxyServer({target:'http://localhost:8008',xfwd:false,ws:true})
.listen(8007);
- Lingua principale
- JavaScript
- Stelle
- 14.1k
- Fork
- 2k
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di http-party/node-http-proxy
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
http-party/node-http-proxy#1719 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 72/100
http-party/node-http-proxy#1721 · 1 commento ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 55/100
http-party/node-http-proxy#1715 · 1 commento · 5 reazioni ·
-
Is this library is dead?Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 15/100
http-party/node-http-proxy#1711 · 2 commenti ·
-
HTTP3 + QUIC support?Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
http-party/node-http-proxy#1710 · 5 reazioni ·
Tutte le issue di http-party/node-http-proxy
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
microsoft/TypeScript#65370 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement good first issue priority: medium
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
TMHSDigital/Free-Game-Dev-Assets#272 ·
I maintainer di solito rispondono entro 1 giorno
-
metrics priority: medium
Difficoltà 1/5 1-3 ore Idoneità per principianti 86/100
LearningCircuit/local-deep-research#8336 ·
I maintainer di solito rispondono entro 1 giorno
-
ace bug yaml
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
svelte: whitespace-only edit leaves an empty todo, edits not trimmed, filter not restored on reloadAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100