1991年:HTTP1.0 时期:每次客户端与服务器进行一次收发操作socket就会断开连接,所以每次请求多要经历TCp的三次握手和四次挥手。比较消耗资源
1997年:HTTP1.1 时期:请求头放入keep-alive ,保证socket连接一直存在,引入持久连接,保证socket可以进行长久的使用,tcp默认不关闭,可以被多个请求复用。
2015年:HTTP2.0 时期:OKHTTP支持2.0的协议,采用二进制而非文本格式,解析更高效,数据更紧凑,错误更少,服务器可以将响应主动推到客户端。
socket又称套接字,是对于tcp/ip的封装,是一个抽象层。
HTTP协议的报文格式:
(1)请求行 ----写了请求方法 URL 协议版本
(2)请求头----存放配置信息
(3)请求体----
Http响应报文格式:
(1)响应行---
(2)响应头---包含content-length 可用于客户端收到响应后按长度接收数据,
(3)响应体---
面试点:假如响应头中不包含content-length,那么客户端时如何知道响应体的数据长度呢?
如果响应体中不包含content-length,那么会有Transfer-Encoding:chunked标识,这个标识的意义就是采用chunked编码将内容分块输出,
分块输出的话,相应的就要进行特殊接收处理。(像OKHTTP网络请求框架一样,一般内部会做Transfer-Encoding:chunked的判断)。
除了Transfer-Encoding:chunked以外,一般情况都是可以获取到content-length的。