分块传输编码浏览器体验 [英] Chunked transfer encoding browser experience

查看:183
本文介绍了分块传输编码浏览器体验的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么输出这个简单的Perl脚本>>

  printContent-type:text / plain\\\
;
printTransfer-Encoding:chunked\\\
\\\
;
print11\\\
\\\
;
print0123456789ABCDEF\\\
;
print11\\\
\\\
;
print0123456789ABCDEF\\\
;
print0\\\
\\\
;

...适用于Chrome浏览器,不适用于IE10 ..

$ b你已经实现了分块传输编码错误:每个块由以十六进制符号表示的块大小(以字节为单位),后跟一个CRLF序列,后跟块数据:


  chunk = chunk-size [chunk-extension] CRLF 
chunk-data CRLF
chunk-size = 1 *
last-chunk = 1 *(0)[chunk-extension] CRLF
chunk-data = chunk-size(OCTET)


所以你的代码应该是这样的:

  printContent-type:text / plain\r\\\
;
printTransfer-Encoding:chunked\r\\\
;
打印\r\\\
;
#first chunk
print10\r\\\
;
print0123456789ABCDEF\r\\\
;
#second chunk
print10\r\\\
;
print0123456789ABCDEF\r\\\
;
#last chunk
print0\r\\\
;
打印\r\\\
;


Why the output of this simple Perl script >>

print "Content-type: text/plain\n";
print "Transfer-Encoding: chunked\n\n";
print "11\n\n";
print "0123456789ABCDEF\n";
print "11\n\n";
print "0123456789ABCDEF\n";
print "0\n\n";

...works for Chrome browser and does not for IE10..?

解决方案

You’ve implemented the chunked transfer coding wrong: Each chunk consists of the chunk size in bytes in hexadecimal notation, followed by a CRLF sequence, followed by the chunk data:

   chunk          = chunk-size [ chunk-extension ] CRLF
                    chunk-data CRLF
   chunk-size     = 1*HEX
   last-chunk     = 1*("0") [ chunk-extension ] CRLF
   chunk-data     = chunk-size(OCTET)

So your code should look like this:

print "Content-type: text/plain\r\n";
print "Transfer-Encoding: chunked\r\n";
print "\r\n";
# first chunk
print "10\r\n";
print "0123456789ABCDEF\r\n";
# second chunk
print "10\r\n";
print "0123456789ABCDEF\r\n";
# last chunk
print "0\r\n";
print "\r\n";

这篇关于分块传输编码浏览器体验的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆