前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTTP协议原理及java实现:数据的基本传输模式

HTTP协议原理及java实现:数据的基本传输模式

作者头像
望月从良
发布2020-04-21 16:34:12
8210
发布2020-04-21 16:34:12
举报
文章被收录于专栏:Coding迪斯尼Coding迪斯尼

zu说到基于TCP协议的上层协议,绝对绕不开的是HTTP协议,在其设计之初,设计者绝对想不到该协议具备的灵活性能够让其成为最广泛使用的TCP上层协议,在我看来HTTP协议几乎能够取代任何基于TCP的上层协议,如今基于互联网的绝大多数移动应用,他们使用的都是HTTP协议,甚至苹果专用的流媒体传输协议HLS,使用的也是HTTP协议,同时现在非常流行的所谓小程序,它们也要基于HTTP协议实现客户端与服务器端的通讯,因此掌握TCP/IP协议就必须要掌握HTTP协议。

HTTP协议的目的非常简单,就是让客户端快速简洁的从服务器请求超文本文件,随着协议的不断进化,它的灵活性能引入更多复杂功能,在深入介绍其原理之前,我们先看看协议规范下,客户端如何与服务器沟通。HTTP协议的运行基于简单的请求-回应模式,首先客户端根据HTTP协议规定构造特定结构的HTTP文本,将客户端要请求的数据信息放置在文本中发送给服务器;服务器收到请求后,结合HTTP协议规范解读客户端发送来的信息,然后将客户端请求的数据返回,HTTP基本交互模式如下:

在HTTP1.0中,客户端与服务器属于“一夜情”模式,双方建立的连接在一次信息交互后立马断开,如果双方需要多次数据交互,那么就需要进行多次tcp连接,这是1.0版本让人诟病之处,HTTP协议在运行时经常使用到中介,于是客户端先把请求发送给中介,中介先对请求数据做预处理,如果客户端想要的数据已经存储在中介,那么中介就会立即将数据返回,于是客户端与服务器就没有交互。如果中介没有客户端想要的数据,他就会将请求转发给服务器,服务器应答请求后会将数据返回给中介,中介将数据缓存,然后将数据回发给客户端,基本流程如下:

从这里可以看到,中介相对于客户端,它扮演了服务器的角色,相对于服务器,它又扮演了客户端的角色。同时可以有多个中介存在于客户端与服务器之间正如上图所示。中介对数据的缓存对HTTP协议的效率提升非常有帮助,例如在我们浏览网页时,网页数据很可能被中介服务器缓存,如果我们下次想再次浏览相同网页,那么中介就可以直接将缓存的页面返还给浏览器,于是网页打开的速度会大大加快。例如在上图中,如果最左端的客户端请求的文件在第一个中介服务器就有缓存,那么数据就不要传输到最右端的服务器,最左边的缓存可以直接将数据返回给客户端,于是客户端的处理效率能大大提升。

在HTTP1.0模式中,客户端与服务器完成一次数据交互后就断开TCP连接。这种模式虽然简单但会带来效率问题。例如浏览器像服务器请求页面后,页面显示时会包含很多图片,此时浏览器又得与服务器经过多次TCP连接来下载页面所需图片,由于TCP连接非常耗时因此这种方式会大大降低页面的加载和渲染效率。HTTP1.1对该问题进行了改良,它让客户端与服务器保持持久连接,于是客户端和服务器就可以通过一次连接传输多种数据。HTTP1.1带来的持久连接还有一个好处就是能让客户端实现请求的管道化传输,如果客户端要向服务器请求数据A,B,C,那么它不用像HTTP1.0时代,先请求A,然后请求B最后再请求C,它可以一次把三个文件的请求发送给服务器,服务器也能一次将数据推送给客户端,从而减轻了服务器负载。

当然持久连接也有代价,那就是增加了复杂性。由于服务器一次将所有数据推送给客户端,于是客户端就得负责处理一次到来的大堆数据,特别是服务器很可能把多个文件以数据流的方式推送给客户端,因此后者必须小心切分数据流将多个数据文件瓦解开来。在HTTP1.1版本中,服务器会在80端口等待客户端的连接。客户端主动发起TCP握手,实现两者的TCP连接,成功连接后客户端必须通知服务器它想使用哪个版本的HTTP协议。如果使用HTTP1.0,那么服务器会在推送一次数据后主动断开连接,如果客户端使用HTTP1.1,但它又希望服务器在推送一次数据后主动断开连接,那么它在请求数据里就要添加字段“Connection:close”,这样服务器就会在推送一次数据后断开连接。

在持久连接情况下,客户端必须要记录它从服务器获得了哪些数据。因为连接可能会因为各种原因中断。如果客户端在接收数据时连接突然中断,那么客户端需要知道哪些数据已经获取,哪些数据还没得到,那么它下次主动发起连接时就只需要请求那些还没有获得的数据。从下一节开始我们分析HTTP的数据包格式,为代码实现HTTP协议做准备。

更多精彩内容请点击’阅读原文‘连接。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coding迪斯尼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档