zoukankan      html  css  js  c++  java
  • 当TransferEncoding遇上ContentEncoding_虚拟现实_百度空间

    当Transfer-Encoding遇上Content-Encoding_虚拟现实_百度空间

    当Transfer-Encoding遇上Content-Encoding

    HTTP1.1协议中,Response头部可以指定Transfer-Encoding(以下简称TE)和Content-Encoding(以下简称CE)两种编码方式。
    开始我简单的以为这两种编码方式不会同时出现,结果是我以为得确实太简单。
    TE和CE是出于两种完全不同的目的而设计的,TE是为无法预知Response内容大小而设计的,否则Web Server首先需要把所有内容缓冲在本地,然后通过Content-Length指明长度,常用于动态页面。CE是为节省网络流量设计的,压缩后Response内容更小,常用于纯文本内容。再多的就不啰嗦了。有兴趣的朋友可以读读HTTP RTF文档。

    TE和CE独立存在的情况相对简单,有很多文章介绍过详细的处理方式。如果TE和CE同时存在呢?
    其实也比较简单。关键是解码先后顺序问题。刚才讲到TE和CE的基本出发点,所以Web Server大概不会设计成先把所有内容缓存起来,然后CE处理,然后再分包做TE处理,因为既然都全部缓存了,就已经知道Content-Length而不需要TE了。有是一些废话:)

    知道了这些就简单了,每得到一个TE的chunk分块完整内容,就对其进行CE解压处理,处理好的内容拼接起来就得到最终的内容,处理完所有chunk分块后页面就出来了。

    用zlib库实现需要注意,依次处理每个chunk分块中间,要保存z_stream的环境,否则解压就会出错了。
  • 相关阅读:
    Linux下的MySQL主从同步
    人不能同时在两个地方做猪(Scrum Team)
    memcache安装
    Java开发中的Memcache原理及实现
    linux mv
    nginx
    idea 热部署
    vue watch
    vue入门
    基于vue-cli快速构建
  • 原文地址:https://www.cnblogs.com/lexus/p/2997465.html
Copyright © 2011-2022 走看看