browserify / browserify/http-browserify

HEAD request not working on Edge

Aperta
#104 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
JavaScript
Stelle
245
Fork
104
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

When doing a HEAD request with the http library, the javascript just crashes and does not give me any answers.

I tried debugging it myself and found that the library uses fetch to fetch the head. The response of this message is given to IncomingMessage. IncomingMessage assumes that a response has a body. In the case of Edge, the body is just null, because a HEAD request has no body.

Nonetheless, this is accessed in anyway:
```
var reader = response.body.getReader()
function read () {
reader.read().then(function (result) {
if (self._destroyed)
return
if (result.done) {
self.push(null)
return
}
self.push(new Buffer(result.value))
read()
}).catch(function(err) {
self.emit('error', err)
})
}
```

And libraries crashes, causing the HEAD request to hang indefinitely.

To be able to use my own code I added a monkey fix, to temporarily make edge work:

```
window.fetch_old = window.fetch
window.fetch = function () {
var result = window.fetch_old.apply(null, arguments);
result.then_old = result.then;
result.then = function (callback) {
return result.then_old(function(response) {
if(response.body === null){
var body = { "getReader" : function () {
return {
"read" : function (){
return {
"then" : function (callback){
callback({"done":true});
return {"catch" : function(){}};
}
}
}
}
}};
//override body....
var handler = {
get: function(target, name) {
if(name === "body"){
return body;
}
return target[name];
}
};
var response_new = new Proxy(response, handler);
return callback(response_new);
}
return callback(response);
});
}
return result;
};
```

But obviously, it would be great if this could be fixed in the library, instead of my ugly hack.

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Direzione di ricerca

Inizia da IncomingMessage, dove il corpo della risposta fetch viene letto con getReader(), e riproduci una richiesta HEAD in Edge. Gestisci il corpo della risposta null senza causare arresti anomali o blocchi, preservando il comportamento esistente per le risposte con corpo.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
javascript
Ambito
api
Tipo di issue
Bug
Difficoltà
2/5
Tempo stimato
1-3 ore
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
42/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.