HTTP的连接和代理


HTTP的连接和代理
2019年10月10日
6:52
短连接与长连接
当浏览器访问一个包含多张图片的 HTML 页面时,除了请求访问的 HTML 页面资源,还会请求图片资源。如果每进行一次 HTTP 通信就要新建一个 TCP 连接,那么开销会很大。

长连接只需要建立一次 TCP 连接就能进行多次 HTTP 通信。

  • 从 HTTP/1.1 开始默认是长连接的,如果要断开连接,需要由客户端或者服务器端提出断开,使用 Connection : close;
  • 在 HTTP/1.1 之前默认是短连接的,如果需要使用长连接,则使用 Connection : Keep-Alive。




    持续连接

    一次性的请求,只建立一次TCP连接:
    在采用持续连接的情况下,服务器在发送响应后保持该TCP连接打开。在相同的客户与服务器之间的后续请求和响应报文能够通过相同的连接进行传送。特别是,一个完整的Web页面可以用单个持续TCP连接进行传送。
    更有甚者,位于同一台服务器的多个Web页面在从该服务器发送给同一个客户时,可以在单个持续TCP连接上进行。可以一个接一个地发出对对象的这些请求,而不必等待对未决请求(流水线)的回答。


    等待超时后,恢复无连接状态
    一般来说,如果一条连接经过一定时间间隔(一个可配置的超时间隔)仍未被使用,HTTP服务器就关闭该连接。HTTP的默认模式是使用带流水线的持续连接。(还有一种是非持续连接,每交互一个资源就需另开一次TCP连接)



  • 从 HTTP/1.1 开始默认是长连接的,如果要断开连接,需要由客户端或者服务器端提出断开,使用 Connection : close;

  • 在 HTTP/1.1 之前默认是短连接的,如果需要使用长连接,则使用 Connection : Keep-Alive。








    代理服务器
    代理服务器相当于拥有一片磁盘存储空间,并且在存储空间保存最近请求过的对象的副本。这样就减少了客户端大多数请求的时间。

  • 浏览器建立一个到Web缓存器的TCP连接,并向Web缓存器中的对象发送一个HTTP请求。

  • Weh缓存器进行检查,看看本地是否存储了该对象副本。如果有,Web缓存器就向客户浏览器用HTTP响应报文返回该对象。
  • 如果Web缓存器中没有该对象,它就打开一个与该对象的初始服务器的TCP连接。发送一个对该对象的HTTP请求。然后接受回复对象
  • 当Web缓存器接收到该对象时,它在本地存储空间存储一份副本,并向客户的浏览器用HTTP响应报文发送该副本(通过现有的客户浏览器和web缓存器之间的TCP连接)。



    HTTP的连接和代理 - 图1




    尽管高速缓存能减少用户的响应时间,但也引入了新的问题:
    缓存的对象可能是陈旧的。(服务端的资源又被修改过)






    代理服务器分为正向代理和反向代理两种:

    HTTP的连接和代理 - 图2









    已使用 Microsoft OneNote 2013 创建。