![](/img/trans.png)
[英]Alter a stream with trumpet, how to get content-length header in http.Response right?
[英][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.