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的环境,否则解压就会出错了。
  • 相关阅读:
    问题汇总
    Spring boot开发过程遇到的一些小问题
    Java 7 新特性
    I2C总线协议详解
    画布分割算法
    nordic __noinit__变量使用
    RTOS事件组使用流程
    RTOS软件定时器的使用
    RTOS互斥信号量的使用流程
    RTOS优先级翻转
  • 原文地址:https://www.cnblogs.com/lexus/p/2997465.html
Copyright © 2011-2022 走看看