zl程序教程

您现在的位置是:首页 >  其他

当前栏目

HTTP 无状态 持久化连接 流水线方式

状态连接HTTP 方式 持久 流水线
2023-09-14 09:15:15 时间

万维网的工作过程


每个万维网网点都有一个服务器进程,它不断地监听 TCP 的端口 80,以便发现是否有浏览器向它发出连接建立请求。(如果是https协议,那么监听的是443端口

一旦监听到连接建立请求并建立了 TCP 连接之后,浏览器就向万维网服务器发出浏览某个页面的请求,服务器接着就返回所请求的页面作为响应。最后,TCP 连接就被释放了。

通常将请求访问的一端称为客户端,提供资源响应的称为服务器端。通信的方式提供请求和响应的方式来完成的,请求从客户端发出,而后服务器端响应该请求,通信是从客户端开始建立的。

任何的网站,它的第一个请求方式都是get,上面可以看出http报文组成如下:

和请求内容无关的,都称为请求头。

  • 请求方法
  • 请求的url
  • 请求的版本号

请求体 

  • 请求内容 页面 图片

请求处理结果的状态码   参数和参数之间都单独起一行。

HTTP 的主要特点


HTTP 使用了面向连接的 TCP 作为运输层协议,保证了数据的可靠传输。

HTTP 协议本身也是无连接的,虽然它使用了面向连接的 TCP 向上提供的服务。

HTTP 是面向事务的客户服务器协议。

HTTP 1.0 协议是无状态的 (stateless)。 (客户端访问完了,就忘了你了,再访问我就再建立TCP再传,并不是一直保持连接知道你是谁)

HTTP很有名的特点,无状态,老年痴呆和无状态非常的类似,http是一个不会保存状态的协议,它不对请求,响应的通信状态做保存。换句话来说就是协议对发送过的请求和响应不会做持久化的处理,每次的请求都是新的请求。

而这一特点是为了处理大量的请求,并且确保协议的可伸缩性,因为不保存就可以节省很多资源,同时没有状态就很容易扩展。

因为无状态,使得很多业务的处理变的复杂,比如用户登入到一家网站购物,在不同的页面进行跳转的时候,需要保持这种登入状态,因为只有这样网站才能知道是谁发起的请求,是谁购物,谁下单。

为了弥补http无状态,就诞生了另外一项技术,叫做cookie,cookie并没有从根本上改变HTTP的无状态,而是通过另外一种方式,变相的维护用户状态。

请求一个万维网文档所需的时间


 发起TCP的时间,http请求报文的时间,传文件的时间。

持续连接


HTTP/1.1 协议使用持续连接 (persistent connection)。

万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的 HTTP 请求报文和响应报文。(只要建立了一个连接,后面传输多个文件都使用这个连接)

这并不局限于传送同一个页面上链接的文档,而是只要这些文档都在同一个服务器上就行。

目前一些流行的浏览器(例如,IE 6.0)的默认设置就是使用 HTTP/1.1。 

一个页面里面包含了n多个文件资源,也就是想获取页面的内容就需要不停的三次握手,这样就会有很多重复性的工作,为了解决多次三次握手,http就提出了持久化连接,它的参数表示为keep-alive,它的特点是只要一端没有明确的提出断开连接,那么就会一直保持连接状态。

这样的好处就是减少了连接的重复建立和断开所造成的开销,这样大大的减少了服务端的负载,给我们直观的感受就是web页面显示的速度也提高了。在http 1.1当中,所有的连接都是持久化连接,需要知道的是持久化连接需要客户端和服务器端都支持才能实现。

HTTP1.1持续连接的两种工作方式


非流水线方式:客户在收到前一个响应后才能发出下一个请求。这比非持续连接的两倍 RTT 的开销节省了建立 TCP 连接所需的一个 RTT 时间。但服务器在发送完一个对象后,其 TCP 连接就处于空闲状态,浪费了服务器资源。

浏览器访问这个网站,先建立TCP连接,3次握手,请求第一个文件,然后收到,再请求第二个文件,收到。

流水线方式:客户在收到 HTTP 的响应报文之前就能够接着发送新的请求报文。一个接一个的请求报文到达服务器后,服务器就可连续发回响应报文。使用流水线方式时,客户访问所有的对象只需花费一个 RTT时间,使 TCP 连接中的空闲时间减少,提高了下载文档效率。 

更快一点的就是流水线方式,一次性发多个请求,一块发,然后一个一个的往回返。(不用等待响应也可以发送下一个请求)