これは非常に難解な問題で、私は小さなテストケースを作ることはできません。しかし、誰かがそれ以前のようなものに遭遇した可能性があります。NodeJSストリームの一時停止/再開はXMLHttpRequestでは機能しませんが、curlで機能しますか?
私はこのようなコード(restifyを使用して)持っている:
server.put("/whatever", function (serverRequest, serverResponse, next) {
serverRequest.pause();
serverRequest.on("data", function (chunk) {
console.log("from outside", chunk);
});
doSomeAsyncStuff(function (err) {
serverRequest.on("data", function (chunk) {
console.log("from inside", chunk);
});
serverRequest.on("end", function() {
next();
});
serverRequest.resume();
});
});
私はCURLを使用して、このサーバーをヒットした場合、これは素晴らしい作品を。しかし、私はXMLHttpRequestでそれを打つと、より少ない"from inside"
ログ行を得るより私は"from outside"
ログ行を行う。 ASAPを一時停止するための最善の努力にもかかわらず、データイベントの1つが失われているようです。
curl -X PUT -T file.pdf http://localhost:7070/whatever -v
そしてここではXMLHttpRequest
コードです(クロームの最近のバージョンで動作します):
var arrayBuffer = fromElsewhere();
var xhr = new XMLHttpRequest();
xhr.open("PUT", "http://localhost:7070/whatever");
xhr.setRequestHeader("Content-Length", arrayBuffer.byteLength);
xhr.setRequestHeader("Content-Type", "application/pdf");
xhr.send(arrayBuffer);
一つの顕著な違いがあることである。ここ
は、私が使用していますCURLコマンドですアップロード前にCURLはExpect: 100-continue
を送信していますが、XMLHttpRequest
はアップロードしていません。手動でヘッダーを追加しようとしましたが、実際にはあまり効果がありませんでした(つまり、Chromeは応答を待たず、元のリクエストとともにすべてのPDFデータを送信しました)。それでも、なぜこのことが影響を与えるのか分かりません。
これについての回答がありましたか?もし私が実際にnodejsを使ってhttp応答を一時停止/再開できるのであれば? – akmsharma