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()单独关闭输入或输出信道,为半关闭。
HTTP(一) 连接管理的更多相关文章
- 转-HttpClient4.3 连接管理
转 http://www.yeetrack.com/?p=782 2.1.持久连接 两个主机建立连接的过程是很复杂的一个过程,涉及到多个数据包的交换,并且也很耗时间.Http连接需要的三次握手开销很大 ...
- 【转】Oracle RAC 环境下的连接管理
文章转自:http://www.oracle.com/technetwork/cn/articles/database-performance/oracle-rac-connection-mgmt-1 ...
- 在SSIS 的 64 位版本中不支持 Excel 连接管理器
Microsoft sql server 2008 R2——> SQL SERVER Business Intelligence Development Studio 使用EXCEL数据源或目标 ...
- 连接管理VMware SphereESXi
连接管理VMware SphereESXi 1. 准备 下载VMware-viclient-all-5.5.0-1993072,并按照提示安装 2. 使用VMware Sphere Client链接事 ...
- 一个Socket连接管理池(心跳机制)
一个Socket连接管理池(心跳机制) http://cuisuqiang.iteye.com/blog/1489661
- boost::asio 连接管理11 如何关闭连接
在实际产品运行中,对连接管理有了更新的认识,这里分享一下. shared_ptr管理连接对象的生命周期 shared_ptr的引用计数器决定了连接对象的生命周期.这里我说的连接对象就是在我的前文:ht ...
- Openfire分析之三:ConnectionManager 连接管理(1)
Openfire是怎么实现连接请求的? XMPPServer.start()方法,完成Openfire的启动.但是,XMPPServer.start()方法中,并没有提及如何监听端口,那么Openfi ...
- SOFA 源码分析 — 连接管理器
前言 RPC 框架需要维护客户端和服务端的连接,通常是一个客户端对应多个服务端,而客户端看到的是接口,并不是服务端的地址,服务端地址对于客户端来讲是透明的. 那么,如何实现这样一个 RPC 框架的网络 ...
- Netty中的连接管理
连接管理是我们首先需要关注的,检测空闲连接以及超时对于及时释放资源来说是至关重要的.由于这是一项常见的任务,Netty特地为它提供了几个ChannelHandler实现. 用于空闲连接以及超时的Cha ...
随机推荐
- [转] gc tips(1)
所有应用软件都需要管理内存,一个应用软件的内存管理系统包括了如下准则:什么时候派发内存,要派发多少内存,什么时候把东西放到回收站,以及什么时候清空回收站.MMgc是Flash Player几乎所有内存 ...
- Android下EditText的hint的一种显示效果------FloatLabelLayout
效果: 此为EditText的一种细节,平时可能用的不多,但是用户体验蛮好的,特别是当注册页面的项目很多的时候,加上这种效果,体验更好 仅以此记录,仅供学习参考. 参考地址:https://gist. ...
- [Everyday Mathematics]20150304
证明: $$\bex \frac{2}{\pi}\int_0^\infty \frac{1-\cos 1\cos \lm-\lm \sin 1\sin \lm}{1-\lm^2}\cos \lm x\ ...
- 多数据源问题--Spring+Ibatis 访问多个数据源(非分布式事务)
有的时候,我在一个工程中需要访问两个以上的数据源,尤其是在系统集成的时候,以下是我在系统集成的时候遇到的情况,我的工程的架构是:spring2.0+ibatis2.0+struts1.2. 数据库是o ...
- 错误记录:html隐藏域的值存字符串时出错
问题 webform在后台给前台传值. <input type="hidden" value="<%=userType %>" id=&qu ...
- 使用xshell使用删除出现乱码
在使用xshell的时候出现如下错误: 1.打开如下属性设置: 2. 查看终端--键盘设置 4.修改为下图所示: 从而可解决删除乱码问题,在设置完成之后,关闭xshell,重新打开即可.
- python的元组和列表使用之一
Python的列表和元组 1. 概述 列表是用方括号[]包围的数据集合,不同的成员之间用逗号进行分隔,列表可以通过序号来进行访问其中的成员,可以对列表进行排序.添加.删除操作,改变列表中某 ...
- nagios为监控图像添加图片
1. 背景介绍 在监控web页面上显示主机都为问号,如下图所示: 本文的主要目的就是将监控的图片添加进去,让监控图像变得美观. 2. 图片的下载地址 图片的下载地址如下: https://exchan ...
- java 代码如何生成 chm
由于要把一个框架的东西打成 chm, 今天在网上找了几篇文章 http://blog.sina.com.cn/s/blog_5d31611a0100gqwp.html 李顺利 首先第一步,从eclip ...
- 离线树状数组 hihocoder 1391 Countries
官方题解: // 离线树状数组 hihocoder 1391 Countries #include <iostream> #include <cstdio> #include ...