・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. 数据结构——Java实现单向链表

    结点类: /** * @author zhengbinMac * 一个OnelinkNode类的对象只表示链表中的一个结点,通过成员变量next的自引用方式实现线性表中各数据元素的逻辑关系. */ p ...

  2. JRE、JDK和JVM之间的关系

    Java学了有两年了,要让详细说说JRE.JDK.JVM,确实不能脱口而出.下面在别人博客的基础上,总结一下. JVM(Java Virtual Machine 即Java虚拟机) 它是整个Java实 ...

  3. 计算机网络——TCP与UDP协议详解

    根据应用程序的不同需求,运输层需要两种不同的运输协议,即面向连接的TCP和无连接的UDP. TCP:传输控制协议 TCP特点: 1)TCP是面向连接的运输层协议.所以,应用程序在使用TCP协议之前,必 ...

  4. 深入了解 Oracle Flex ASM 及其优点

    简介 Oracle Real Application Cluster (RAC) 是 Oracle 解决方案中的一个著名产品,用于保持业务数据的高可用性.Oracle RAC 允许在所有集群节点之间共 ...

  5. Arduino报错

    avrdude: stk500_recv(): programmer is not respondingavrdude: stk500_getsync() attempt 1 of 10: not i ...

  6. RIA+REST架构实现完美WEB开发

    记得第一次看到REST的身影,是在InfoQ上的一篇介绍,随后又翻阅了后面的参考文章和Developerwork上一些资料,甚至随手翻了翻Roy博士的论文.所幸,在不少人还在体会REST到底是何方神圣 ...

  7. Intent(意图)

    Intent的中文意思是“意图,目的”的意思,可以理解为不同组件之间通信的“媒介”或者“信使”. 目标组件一般要通过Intent来声明自己的条件,一般通过组件中的<intent-filter&g ...

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

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

  9. 单机版搭建Hadoop环境图文教程详解

    安装过程: 一.安装Linux操作系统二.在Ubuntu下创建hadoop用户组和用户三.在Ubuntu下安装JDK四.修改机器名五.安装ssh服务六.建立ssh无密码登录本机七.安装hadoop八. ...

  10. 【LeetCode】226 - Invert Binary Tree

    Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9          to 4 / \ 7 2 / \ / \ 9 6 3 1   Notice: Goog ...