• 【HTTP协议】响应头中的Content-Length和Transfer-Encoding


    来源:

    http://blog.csdn.net/superhosts/article/details/8737434

    http://bbs.csdn.net/topics/390384017

    对于http的请求返回结果要进行内容的长度校验主要有两种方式:

    1.客户端在http头(head)加Connection:keep-alive时,服务器的response是Transfer-Encoding:chunked的形式,通知页面数据是否接收完毕,例如长连接或者程序运行中可以动态的输出内容,例如一些运算比较复杂且需要用户及时的得到最新结果,那就采用chunked编码将内容分块输出。

    2.除了如1所述之外的情况一般都是可以获取到Content-Length的。

    Content-Length如果存在并且有效的话,则必须和消息内容的传输长度完全一致。(经过测试,如果过短则会截断,过长则会导致超时。)

    如果存在Transfer-Encoding(重点是chunked),则在header中不能有Content-Length,有也会被忽视。

    -----------------------------------------------------------------------------------------------------

    Transfer-Encoding: chunked的意思是:一边读数据,一边发给客户端。不是一下传输。会带这个头信息。
    Content-Length:则是,服务器内已经缓存了哪个说句,一下发送给客户端会带这个头信息。

    情况是这样的,服务端是动态生成的,你在数据很小的时候,没超过服务器的buffer大小的情况下
    HTTP的header还没传输过来,能够把Content-Length传输过来。
    在数据的大小超过buffer的情况下,服务器必须将HTTP Header和Entity(数据)flush到客户端,这个时候,entity大小仍然未知,所以没有Content-Length。

  • 相关阅读:
    Docker管理应用数据
    Docker Swarm mode
    Docker Compose file
    Docker Compose 多容器应用
    MySQL中ORDER BY与LIMIT一起使用(有坑)
    Docker for Java Developers
    Nifi 模板
    Nifi InvokeHttp processor
    Mac上连接nifi
    前端开发环境webstorm搭建
  • 原文地址:https://www.cnblogs.com/dplearning/p/5728228.html
Copyright © 2020-2023  润新知