繁体   English   中英

[http]未指定content-length时如何识别流的结尾?

[英][http]How to identify end of stream when content-length is not specified?

首先让我展示我的代码。

http=require("http");
fs=require("fs");
var server=http.createServer(function(req,res){
    var readStream=fs.createReadStream("1.jpg");
    readStream.on("data",function(data){
        res.write(data);
    });
    readStream.on("end",function(data){
        res.write("this string seems not to be sent","utf8");
        res.end("end","utf8");
    });
});

server.listen(3000);

我创建了图片1.jpg的readStream,然后发送了数据流。 在触发“ end”事件后,我发送了一个字符串“该字符串似乎不发送”。 我没有在标题中指定content-length。

在客户端,我实际上正确地得到了1.jpg。 但是我没有收到字符串。 我猜肯定有一些标志着流的结束。 如果是这样,商标是什么? 这个怎么运作?

我知道用“ chunked”分配传输编码是一种发送长度不确定的数据的方法,但我的野生动物园显示响应标头是:

连接保持活动
传输编码身份

在客户端,我实际上正确地得到了1.jpg。 但是我没有收到字符串。

实际上,字符串发送。 要确认这一点:

$ echo '(Contents of a JPEG file.)' >1.jpg

$ curl -i http://localhost:3000/
HTTP/1.1 200 OK
Date: Sat, 23 May 2015 08:01:48 GMT
Connection: keep-alive
Transfer-Encoding: chunked

(Contents of a JPEG file.)
this string seems not to be sentend

您的浏览器(或图像查看器)了解JPEG的格式,因此它会忽略末尾的多余字符串。 但是,已发送。

我猜肯定有一些标志着流的结束。

是。 数据由分块的传输编码标记定界。 curl默认情况下不显示它们,但是它们存在。 要在响应中查看它们:

$ curl -i --raw http://localhost:3000/
HTTP/1.1 200 OK
Date: Sat, 23 May 2015 08:23:02 GMT
Connection: keep-alive
Transfer-Encoding: chunked

1b
(Contents of a JPEG file.)

20
this string seems not to be sent
3
end
0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM