1. [WIP]为什么http也keep-alive
Last updated
Was this helpful?
Last updated
Was this helpful?
正常情况下一条HTTP请求结束以后就会断开连接, 下一条连接就会从TCP握手重新开始. 或者你也可以选择使用KeepAlive属性(现在基本都是默认打开的), 连接建立起来以后不会断开, 下一个请求来了直接复用现有链接, 这就是我们经常说的HTTP长连接
从表面上看, 光是不用握手这一点就省了不少时间, 但也不是所有场景都需要你开KeepAlive, 比如一个冷门图片下载, 一年都下不了几次, 为它还KeepAlive就是浪费服务器连接数
在这之后还开发出了一些新技术, 叫HTTP-Pipelining
, 意思是不用等回复就直接连发数条消息, 大概是这样的:
回顾一下刚刚的pipelining, 里面是三条HTTP消息一起过来的, 如果这三条消息分别代表三条请求, 我们应该怎么把这三条请求拆开?
好在HTTP报头有一个字段能告诉我们这条消息的长度, 那我们直接读出这么多长度就算读完一条消息就好了
但如果没有这个字段呢? 怎么分包呢? 这种情况的确是存在的, 思考如果只是一个简单的页面或是一张简单的图片, 那么服务器可以给你算一个大小出来. 但如果是动态的生成的, 那怎么办? 难道等全部生成完再发吗? 一下给整出个大内存消耗, 用户也要等很长时间,不合适.
这个时候我们就把动态的东西切成一小段一小段的发给你, 我们每一段都叫一个chunk
, 每一段chunk都配有一个长度, 最后这么多段chunk合在一起构成一个完整的视频, 我们会先把chunk-size写在chunk头, 然后你把chunk-size读出来就可以了就能读出一个完整的包出来