・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()单独关闭输入或输出信道,为半关闭。

HTTP(一) 连接管理的更多相关文章

  1. 转-HttpClient4.3 连接管理

    转 http://www.yeetrack.com/?p=782 2.1.持久连接 两个主机建立连接的过程是很复杂的一个过程,涉及到多个数据包的交换,并且也很耗时间.Http连接需要的三次握手开销很大 ...

  2. 【转】Oracle RAC 环境下的连接管理

    文章转自:http://www.oracle.com/technetwork/cn/articles/database-performance/oracle-rac-connection-mgmt-1 ...

  3. 在SSIS 的 64 位版本中不支持 Excel 连接管理器

    Microsoft sql server 2008 R2——> SQL SERVER Business Intelligence Development Studio 使用EXCEL数据源或目标 ...

  4. 连接管理VMware SphereESXi

    连接管理VMware SphereESXi 1. 准备 下载VMware-viclient-all-5.5.0-1993072,并按照提示安装 2. 使用VMware Sphere Client链接事 ...

  5. 一个Socket连接管理池(心跳机制)

    一个Socket连接管理池(心跳机制) http://cuisuqiang.iteye.com/blog/1489661

  6. boost::asio 连接管理11 如何关闭连接

    在实际产品运行中,对连接管理有了更新的认识,这里分享一下. shared_ptr管理连接对象的生命周期 shared_ptr的引用计数器决定了连接对象的生命周期.这里我说的连接对象就是在我的前文:ht ...

  7. Openfire分析之三:ConnectionManager 连接管理(1)

    Openfire是怎么实现连接请求的? XMPPServer.start()方法,完成Openfire的启动.但是,XMPPServer.start()方法中,并没有提及如何监听端口,那么Openfi ...

  8. SOFA 源码分析 — 连接管理器

    前言 RPC 框架需要维护客户端和服务端的连接,通常是一个客户端对应多个服务端,而客户端看到的是接口,并不是服务端的地址,服务端地址对于客户端来讲是透明的. 那么,如何实现这样一个 RPC 框架的网络 ...

  9. Netty中的连接管理

    连接管理是我们首先需要关注的,检测空闲连接以及超时对于及时释放资源来说是至关重要的.由于这是一项常见的任务,Netty特地为它提供了几个ChannelHandler实现. 用于空闲连接以及超时的Cha ...

随机推荐

  1. ArcEngine 通过IRelationalOperator.Relation判断几何体相交

    IRelationalOperator 接口: 1. Provides access to members that determine if a certain spatial relationsh ...

  2. DataReader方式 获取数据的操作

    一.使用DataReader读取为对象List /// <summary> /// 获得数据列表List<>,DataReader 使用参数的 /// </summary ...

  3. Cent OS5.2安装Hyper-V集成光盘

    一.Hyper-V安装windows系统没有问题,windows2000以后系统都可以,一切顺利. 驱动程序:IDE.SCSI.网络.视频和鼠标 要想实现更强的功能,宿主机需要安装Hyper-V集成光 ...

  4. Delphi VclSkin使用教程

    1. TSkinData   TSkinData 主要用于美化你的程序, 只要把TSkinData控件放下去,它就能自动美化所有窗体. 属性 Active: 使用或取消对程序的美化. DisableT ...

  5. hdu 5254 水题

    纯暴力就能过的,可是题目描述真心不清楚,我看了好久好久才明白题目啥意思. 为了迅速打完,代码比较冗余. /* * Author : ben */ #include <cstdio> #in ...

  6. Linux常用文件管理命令

    Command Description cat filename 查看文件内容. cd dirname 改变所在目录. cp file1 file2 复制文件或目录. file filename 查看 ...

  7. Linux基本命令(7)文件阅读的命令

    文件阅读的命令 命令 功能 head 查看文件的开头部分 tail 查看文件结尾的10行 less less是一个分页工具,它允许一页一页地(或一个屏幕一个屏幕地)查看信息 more more是一个分 ...

  8. VBS学习:流程控制语句判断结构

    一.数值运算: 1) Dim a,b,c a=inputbox("a是:","输入半径") b=Inputbox("b是:","输 ...

  9. echo输出空行

    rem 以下方法都可以输出空行,这十种方法分为三组,每组的效率依次递减 echo= echo, echo; echo+ echo/ echo[ echo] echo: echo. echo\

  10. C++的类成员和类成员函数指针

    类成员函数指针: 用于访问类成员函数,和一般函数指针有区别. 类成员函数处理的是类数据成员,声明类成员函数指针的同时,还要指出具体是哪个类的函数指针才可以.调用时也要通过对象调用. 而对于类的静态成员 ...