HTTP(一) 连接管理

 

・HTTP是如何使用TCP连接的

 

  HTTP传送一条报文时,以流的形式将报文数据内容通过一条打开的TCP连接按序传输。

  TCP收到数据流之后,由TCP/IP软件将数据流砍成被称作段的小数据块,并将段封装在IP

  分组中,通过因特网进行传输。

 

  TCP是通过端口号来保持连接的正确运行。

 

・TCP连接性能

 

  TCP慢启动:连接会随着时间的推移提高传输的速度。

 

  TIME_WAIT累计与端口耗尽:

  当某个端点关闭TCP连接时,会在内存中维护一个小的控制块,用来记录最近所关闭连接的IP地址和端口号。

  一般为2分钟(最大分段生存期),2MSL。防止在两分钟内创建、关闭并重新创建两个具有相同IP地址和端口号的连接。(防止破坏TCP数据)

 

提高HTTP的连接性能:

 

  ・并行连接

 

    通过多条TCP连接发起并发的HTTP请求。

    并行连接总数限制通常为4个

  

  ・持久连接

 

    重用TCP连接,以消除连接及关闭时延。

    在事物处理结束之后仍然保持打开状态。

    可以避开缓慢的连接建立阶段,并避免了慢启动的拥塞适应阶段。

   

    HTTP/1.0 keep-alive:默认关闭,注意哑代理;

    HTTP/1.1 proxy-connection: 默认开启,不会产生哑代理;

 

    限制和规则:

    客户端不想在连接上发送其他请求时,应在最后一条请求中发送Connection: close首部;

    一个用户客户端对任何服务器或代理最多只能维护两条持久连接,防止服务器过载;

   

  ・管道化连接

 

    通过共享的TCP连接发起并发的HTTP请求。

    HTTP1.1 允许在持久连接上可选使用请求管道。在响应到达之前,将多条请求放入队列。

 

   

    限制:

    如果HTTP客户端无法确认连接时持久的,就不应该使用管道;

    必须按照与请求相同的顺序回送HTTP响应;

    HTTP客户端必须做好连接在任意时刻关闭的准备,并重发未完成的管道化请求;

    HTTP客户端不应该使用管道化方式发送会产生副作用的请求(如POST);

 

  ・复用的连接

    交替传送请求和响应报文

 

连接管理:

 

   幂等:如果一个事物,不管执行一次还是多次,得到的结果都相同;

   GET、HEAD、PUT、DELETE、TRACE、OPTIONS都有幂等性;

  

   关闭连接:

   TCP连接时双向的,每一端都有一个输入和输出队列;

 

完全关闭和半关闭:

 

   套接字调用close()会将TCP输入输出信道都关闭,为完全关闭;

   套接字调用shutdown()单独关闭输入或输出信道,为半关闭。

  

 

posted @ 2016-12-21 18:15  dreamerjdw  阅读(212)  评论(0编辑  收藏  举报