HTTP版本迭代

HTTP:超文本传输协议,基于TCP实现的应用层协议

HTTP版本的演化过程:

 

 

【HTTP0.9】

仅仅能支持get方法,并且只能请求和响应HTML格式的资源

【HTTP1.0】

开始包含头信息:

并且增加POST和HEAD请求方法:

HEAD:和Get方法类似,只不过服务器HTTP响应体中没有内容,通常用于检测链接的有效性

 

同时增加了响应体的内容格式:

  • text/html
  • text/json
  • image/png
  • image/jpeg
  • ....

一个典型的HTTP响应报文的响应头:

Content-Language: zh-CN
Content-Length: 43756
Content-Type: text/html;charset=UTF-8
Date: Sun, 25 Oct 2020 16:31:09 GMT
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=dWi7X6oNWfBN-88xGmDuFq94.undefined; Path=/

可以看到响应报文头主要以Key:Value方式记录了元信息:

响应体长度、响应体格式、字符编码、服务器名称、以及服务器返回的SessionID等

SessionID为服务器产生的一个客户端会话标识,客户端下一次HTTP请求报文中带上该SessionID
那么服务器将确认客户端身份,而无需进行认证,SessionID在客户端通常存放于本地的Cookie中

 

【HTTP1.1】

①:引入长连接机制

在完成一个HTTP请求=》响应后,TCP连接不关闭,而是可以继续被复用

 

在建立起TCP连接后,这个连接可不断的传输多个HTTP请求报文和响应报文,其基于TCP长连接机制,默认timeout为:7200s

因此其相对于HTTP1.0主要改善点:

  1. 避免频繁的建立和关闭TCP连接:三次握手和四次挥手带来的开销和时延。
  2. 避免TCP刚建立连接时,拥塞控制算法造成的低传输效率,主要是慢启动阶段

 

②:管道机制实现同时发送多个HTTP请求

另外HTTP1.1还基于管道机制,使得一个TCP连接中,允许发送多个请求

HTTP1.0中:一个请求发出后,客户端需要等待服务器响应完成后,才能发送下一个HTTP请求

HTTP1.1中:客户端可同时发出多个HTTP请求,避免长时间等待在耗时的HTTP请求中。

 

 

③:Content-length 与分块传输

Conetnt-length字段位于HTTP响应报文中,用于确定响应体的字节长度。

客户端从TCP缓冲区中:

先读取响应行、响应体、以及一个空行,解析出HTTP报文的头部信息和元数据(文本格式)。

根据Content-length字段,从缓冲区读取指定的长度字节。从而分割不同的HTTP响应报文

 

 

若响应体的内容非常大,或者是不断增大的,在服务器封装HTTP响应报文头时无法确切知道Content-length大小。HTTP1.1

解决方法是,采取流模式分块传输:

分块传输机制:不使用Content-length字段,而是Transfer-Encoding:Chunked

在响应体中,每一个数据分块前面指明大小16进制数,最后一个数字0表示结束

 

④:文件断点续传

文件通过HTTP协议传输时,其本质基于TCP实现可靠的传输

通常基于HTTP下载文件中,已传输的部分通过文件系统写入到临时文件(.temp  .download等格式中)

当发生暂停或者网络断开,下一次继续重传时,HTTP请求报文中,添加已经传输部分的长度

 

 

【HTTP2.0】

双工模式:不仅仅客户端可以发生多个HTTP请求,服务端也可以同时响应多个HTTP请求

基于IO复用技术,一个线程可以处理多个HTTP请求,避免队头堵塞的现象。同时HTTP多个请求 可能包含大量的HTTP请求头字段重复。HTTP2.0采取字段表形式,传输不再传输完整字段,可以仅仅传输相应的字段索引。

 

二进制协议:HTTP1.1其请求行、请求头为文本格式,而请求体可以不同的格式
而HTTP2.0头信息和体信息均为二进制格式,即所谓的头信息帧和数据帧。

 

 

已标记关键词 清除标记
相关推荐
<p> <b><span style="font-size:14px;"></span><span style="font-size:14px;background-color:#FFE500;">【Java面试宝典】</span></b><br /> <span style="font-size:14px;">1、68讲视频课,500道大厂Java常见面试题+100个Java面试技巧与答题公式+10万字核心知识解析+授课老师1对1面试指导+无限次回放</span><br /> <span style="font-size:14px;">2、这门课程基于胡书敏老师8年Java面试经验,调研近百家互联网公司及面试官的问题打造而成,从筛选简历和面试官角度,给出能帮助候选人能面试成功的面试技巧。</span><br /> <span style="font-size:14px;">3、通过学习这门课程,你能系统掌握Java核心、数据库、Java框架、分布式组件、Java简历准备、面试实战技巧等面试必考知识点。</span><br /> <span style="font-size:14px;">4、知识点+项目经验案例,每一个都能做为面试的作品展现。</span><br /> <span style="font-size:14px;">5、本课程已经在线下的培训课程中经过实际检验,老师每次培训结束后,都能帮助同学们运用面试技巧,成功找到更好的工作。</span><br /> <br /> <span style="font-size:14px;background-color:#FFE500;"><b>【超人气讲师】</b></span><br /> <span style="font-size:14px;">胡书敏 | 10年大厂工作经验,8年Java面试官经验,5年线下Java职业培训经验,5年架构师经验</span><br /> <br /> <span style="font-size:14px;background-color:#FFE500;"><b>【报名须知】</b></span><br /> <span style="font-size:14px;">上课模式是什么?</span><br /> <span style="font-size:14px;">课程采取录播模式,课程永久有效,可无限次观看</span><br /> <span style="font-size:14px;">课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化</span><br /> <br /> <br /> <span style="font-size:14px;background-color:#FFE500;"><strong>如何开始学习?</strong></span><br /> <span style="font-size:14px;">PC端:报名成功后可以直接进入课程学习</span><br /> <span style="font-size:14px;">移动端:<span style="font-family:Helvetica;font-size:14px;background-color:#FFFFFF;">CSDN 学院APP(注意不是CSDN APP哦)</span></span> </p>
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:C马雯娟 返回首页