Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Nodejs:在OS X中将分块HTTP数据管道传输到文件时出现意外行为_Node.js_Express - Fatal编程技术网

Node.js Nodejs:在OS X中将分块HTTP数据管道传输到文件时出现意外行为

Node.js Nodejs:在OS X中将分块HTTP数据管道传输到文件时出现意外行为,node.js,express,Node.js,Express,在OSX中,从HTTP向文件传输分块数据时,我遇到了一个奇怪的问题 当触发启动下载的GET HTTP请求时,我的服务器会用以下标题进行响应: < content-disposition: attachment; filename="resin-Rpi2-0.1.0-0.0.12.img" < content-encoding: gzip < content-type: application/octet-stream < date: Wed, 06 May 2015 19

在OSX中,从HTTP向文件传输分块数据时,我遇到了一个奇怪的问题

当触发启动下载的GET HTTP请求时,我的服务器会用以下标题进行响应:

< content-disposition: attachment; filename="resin-Rpi2-0.1.0-0.0.12.img"
< content-encoding: gzip
< content-type: application/octet-stream
< date: Wed, 06 May 2015 19:03:33 GMT
< X-Frame-Options: DENY
< x-powered-by: Express
< transfer-encoding: chunked
< Connection: keep-alive
如果我运行该脚本,我会正确地获得初始数据块(对应于大约10MB的数据),但是连接会突然终止,并且不会从任何流触发任何其他事件(close、end等)

更奇怪的是注释掉
gzip:true
会导致期望的行为(在这种情况下,我当然会得到一个*.img.gz文件),如果保持
gzip:true
并将管道连接到
进程.stdout
而不是一个文件,它也会像预期的那样工作

还要注意,这个问题在Ubuntu上是不可复制的。这似乎只发生在OSX和Windows中

cURL
也能正常工作:

$ curl -H "Authorization: Bearer [token]" "https://dashboard.resin.io/download?network=ethernet&wifiSsid=&wifiKey=&appId=[appid]" -o image.img
我已经开始分析数据包通信():

我可以看到我的IP突然发送ACK/FIN,而服务器仍在向我发送数据块:

Id = 2984
Source = 192.168.0.16
Destination = 52.4.102.97
Captured Length = 66
Packet Length = 66
Protocol = TCP
Date Received = 2015-05-06 18:11:36 +0000
Time Delta = 10.27246999740601
Information = 52264 -> 443 ([ACK, FIN], Seq=2137874087, Ack=3255859962, Win=10407)
然后是RST和ACK的长循环:

...
192.168.0.16 -> 52.4.102.97, 52264 -> 443 RST
52.4.102.97 -> 192.168.0.16, 443 -> 52264 ACK
...
最后双方达成一致意见


我做错了什么?使用
节点请求
Express
公开/使用分块HTTP数据的正确方法是什么?

我可以使用节点
0.12.2
0.11.16
,重现您的问题,但是在
0.10.38
中,您的代码工作得非常好。希望这能有所帮助。@AndrewLavers感谢您抽出时间进行测试,非常感谢。我可以通过手动将块写入目标流(使用
destination.write(data)
data
监听器中)而不是管道来实现,但我仍然在寻找解释。我认为这值得一个githubissue@AndrewLavers我在此处创建了一个问题:。
...
192.168.0.16 -> 52.4.102.97, 52264 -> 443 RST
52.4.102.97 -> 192.168.0.16, 443 -> 52264 ACK
...