【发布时间】:2012-04-06 11:11:12
【问题描述】:
这是一个非常深奥的问题,我无法制作一个小的测试用例,所以提前抱歉。但也许有人以前遇到过类似的事情。
我有这样的代码(使用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" 日志行少。尽管我尽最大努力尽快暂停,但似乎其中一个数据事件正在丢失。
这是我正在使用的 CURL 命令:
curl -X PUT -T file.pdf http://localhost:7070/whatever -v
这里是XMLHttpRequest 代码(适用于最新版本的 Chrome):
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 似乎在上传之前发送 Expect: 100-continue,而 XMLHttpRequest 没有。我尝试手动添加该标头,但当然它实际上并没有做太多(即 Chrome 没有等待响应,它只是将所有 PDF 数据连同原始请求一起发送)。即便如此,我也不知道为什么会这样。
【问题讨论】:
-
你得到这个答案了吗?如果我真的可以使用 nodejs 暂停/恢复 http 响应?
标签: javascript http node.js xmlhttprequest arraybuffer