HTTP Response Body Output Method

风行水上 @ 2014-06-01 09:44:55
标签:

    HTTP协议的输出分为响应头和响应内容。头部信息通常较短,相应内容则可能很长。

    怎样有效率地输出响应内容就成了一个需要研究的问题。

    EOF Output

    既然是输出,那很显然就跟其他输出流一样,用EOF标记结束位置就好了。

    HTTP/1.1 200 OK
    
    Output Start Here
    <EOF>
    

    Content-Length Output

    如果可以提前知道有多少字节需要读取就好了。于是有了"Content-Length"属性,用于提前指定内容长度。

    这要求先缓存全部输出内容,以计算内容长度。

    HTTP/1.1 200 OK
    Content-Length: 9
    
    123456789
    

    Trunked Output

    但是没有办法一下子知道全部输出内容的大小,能不能分批输出呢。于是有了"chunked"的输出方式。

    借助"Transfer-Encoding"来指定输出编码。这本质上是对内容的一种编码(Encoding)。

    "chunked"编码的具体方法倒也很简单:一行16进制表示的字节长度 + 相应的字节流 + 换行符。最后以一个长度为0的块表示结束。

    HTTP/1.1 200 OK
    Transfer-Encoding: chunked
    
    18
    data chunk 123 size = 24 
    1B
    data chunk 456789 size = 27
    0
    
    
    标签:

      分享到:
      comments powered by Disqus

      27/30ms