欢迎光临
我们一直在努力

计算机网络之十二:HTTP协议



一:HTTP简介


HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。


它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组


IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本。


其中最著名的就是RFC 2616。RFC 2616定义了今天普遍使用的一个版本——HTTP 1.1。


HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。


它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,


以及哪部分内容首先显示(如文本先于图形)等。


HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。


http://cimc-express.com/ 是哥URL,叫统一资源定位符。 HTTP称为协议,cimc-express.com是一个域名,表示互联网上


的一个位置。浏览器会将cimc-express.com解析为IP地址,HTTP


是基于TCP协议的,要先建立TCP连接。


目前使用的HTTP协议大部分是1.1. 在1.1协议里面,默认开启了Keep-Alive,这样建立的TCP连接,可以在多次请求中复用。



二:HTTP发送报文


HTTP报文大概分为三大部分。第一部分是请求行,第二部分是请求的首部,第三部分是请求的正文实体。


1.请求行


URL就是http://cimc-express.com,版本是HTTP1.1,HTTP中的方法类型有:



GET:



去服务器端获取资源,对于访问网页来讲,获取的是一个页面;对于一个基于HTTP协议的API,返回的可能是一个


JSON字符串



POST:



向服务器端提交资源



PUT:



向服务器端提交资源,POST往往是用来创建一个资源,PUT往往是用来修改一个资源



DELETE:



删除资源


2.首部


首部是key:value形式,保存一些非常重要的字段。Accept-Charset表示客户端可以接受的字符集,Content-Type指正文的


格式,Cache-Control是用来控制缓存的。


3.正文实体



三:HTTP数据发送


1.HTTP协议是基于TCP协议的,它使用面向连接的方式发送请求,通过stream二进制流的方式传给对方。到了TCP层,会把


二进制流变成一个报文段发送给服务器。


2.在发送每个报文段的时候,都需要对方有一个回应ACK,来保证报文可靠到达了对方。如果没有回应,那么TCP这一层会


进行重新传输,直到可以到达。同一个包


有可能被传了多次,但是HTTP这一层不知道这一点。


3.TCP层发送每一个报文的时候,都需要加上自己的地址(源地址)和它想要去的地址(目标地址),将这两个信息放到IP头


里面,交给IP层进行传输。


4.IP层需要查看目标地址和自己是否在同一个局域网。如果是,就发送ARP协议来请求这个目标地址对应的MAC地址,然后将


源MAC地址和目标MAC地址放入MAC头,


发送出去即可;如果否,就需要发送到网关,还需要发送ARP协议,来获取网关的


MAC地址,然后将源MAC地址和网关MAC放入MAC头,发送出去。


5.网关收到包发现MAC符合,取出目标IP地址,根据路由协议找到下一跳的路由器,获取下一条路由器的MAC地址,将包发


给吓一跳路由。


6.目标的机器发现MAC地址符合,就将包收起来;发现IP地址符合,根据IP头重协议项,知道自己上一层是TCP协议,于是解


析TCP的头,里面有序列号,需要看看这个序列


号是不是我要的,如果是就放入缓存中然后返回一个ACK,如果不是就丢弃


7.TCP头里面还有端口号,HTTP的服务器正在监听这个端口号。于是,目标机器自然知道是HTTP服务器这个进程想要这个包,


于是将包发给HTTP服务器。HTTP服务器的进程


看到,原来这个请求是要访问一个网页,于是就把这个网页发送给客户端。





四:HTTP返回报文


1.状态码


200:交易成功,400:错误请求  404:没有发现文件、查询或URl  500:内部服务器错误 502:网关错误


2.返回首部key:value.  Retry-After表示客户端应该在多长时间以后再次尝试一下,Content-Type表示返回的是HTML,还是


JSON。


3.构造好了返回的HTTP报文,接下来就是把这个报文发送出去。是交给Socket去发送,还是交给TCP层,让TCP层将返回的


HTML,也分成一个个小的段,并且保证每个段都可靠


到达。



五:HTTP2.0


1.HTTP1.1在应用层以纯文本的形式进行通信,每次通信都要带完整的HTTP的头,而且不考虑pipeline模式的话,每次的过程


总是一去一回。这样在实时性和并发性上都存在问题。


2.HTTP2.0会对HTTP头进行一定的压缩,将原来每次都要携带的大量key:value在两端建立一个索引表,对相同的头只发送


索引表中的索引。


3.HTTP2.0协议将一个TCP的连接中,切分成多个流,每个流都有自己的ID,而且流可以是客户端发往服务端,也可以是服务


端发往客户端,它其实只是一个虚拟的通道,流是有


优先级的


4.HTTP2.0还将所有的传输信息分割为更小的消息和帧,并对它们采用二级制格式编码。常见的帧有Header帧,用于传输


Header内容,并且会开启一个新的流。再就是Data帧,用来


传输正文实体,多个Data属于同一个流。


5.通过这两种机制,HTTP2.0的客户端可以将多个请求分到不同的流中,然后将请求内容拆成帧,进行二进制传输。这些帧可


以打散乱序发送,然后根据每个帧首部的流标识符重新组装


,并且可以根据优先级,决定优先处理哪个流的数据。



举例:



一个页面要发送三个独立的请求,一个获取css,一个获取js,一个获取图片jpg. 如果使用HTTP 1.1 就是串行的;但是如果


使用HTTP 2.0,就可以在一个连接里,客户端和服务端都可以


同时发送多个请求或回应,而且不用按照顺序一对一对应。


HTTP2.0成功解决了HTTP1.1的队首阻塞问题,同时,也不需要通过HTTP 1.X的pipeline机制用多条TCP连接来实现并行请求


与响应;减少了TCP连接数对服务器性能的影响,同时将页面的


多个数据css,js,jpg等通过一个数据连接进行传输,能够加快页


面组件的传输速度。



六:QUIC


HTTP 2.0虽然大大增加了并发性,但还是有问题的。因为HTTP 2.0也是基于TCP协议的,TCP协议在处理包时是有严格顺序的


。Google的QUIC协议基于UDP实现,包含自定义连接机制,


自定义重传机制,无阻塞多路复用和自定义流量控制。

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。