http:关于长连接和分块传输

动态生成的内容比如压缩流,动态网页
+js hide,事先并不知道Content-Length, 为了提高响应速度,希望一边生成一边传输,通常以关闭连接表明内容传完完毕。但是希望连接keep-alive呢?

解决办法是chunked transfer encoding,RFC规范要求如果是http/1.1,服务端和客户端都必须支持。

例子:
HTTP/1.1 200 OK\r\n
Transfer-Encoding: chunked\r\n
Trailer: checksum\r\n
\r\n
A\r\n
0123456789\r\n
0\r\n
checksum:crc\r\n

\r\n

可以看出,比如由整块传输大小10字节数据优化为分块传输:5+3+2+0,先前的Content-Length,如果是要Content-MD5, 需要先把文件内容过一遍,暂存下计算值,在重新读一遍文件,可以称作是Storage-and-Forword方式。


对于本地文件,事先就知道大小,没有必要搞这个。对于客户端实时访问hls分片文件,保持长连接也许会避免一些开销,但是hls小文件的初衷是CDN,连接怎么可能动态迁移呢?另外在wifi,3g网络,长连接更是不可能。

个人认为http/1.1默认长连接还是针对PC LAN这样的环境设计的,已经不适应当前复杂的网络环境,增加了web server的复杂性。

(我今天尝试去实现,发现对先前的代码影响太大了)

你可能感兴趣的:(网络)