簡體   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