HTTP协议(1)—HTTP的连接

一、TCP连接
过程:
a.浏览器解析出主机名
b.浏览器查询出这个主机名的IP地址
c.浏览器获得端口号
d.浏览器发起到ip:port的连接(TCP连接)
e.浏览器向服务器发送一条HTTP报文
f.浏览器从服务器读取HTTP响应报文
g.浏览器关闭连接

1.TCP的可靠数据管道
从TCP连接一端填入的字节会从另一端以原有的顺序、正确地传送出来

2.TCP流是分段的,由IP分组传送
HTTP会以流的形式将报文数据的内容通过一条打开的TCP连接按序传输,TCP收到数据流之后会把数据流砍成被称作段的小数据块,并将段分装在IP分组中,通过因特网进行传输

3.保持TCP连接的正确运行
通过端口号来保持连接的正确运行
TCP连接的识别:
<源IP地址、源端口号、目标IP地址、目标端口号>

二、对TCP性能的考虑
1.HTTP事务的时延
主要原因:
a.DNS查询
b.TCP连接请求
c.服务器处理http报文
d.服务器回送http响应

3.性能聚焦区域
a.TCP连接的握手延时
i.请求新的连接时,客户端向服务器端发送一个TCP分组,设置SYN标记
ii.服务器接收连接,会对一些连接参数进行计算,并回送一个TCP分组,包含SYN+ACK标记
iii.最后客户端向服务器端回送一条确认信息ACK,通知服务器连接已建立

b.延迟确认
TCP可以将确认信息和输出的数据分组一起发送出去,TCP现将确认信息存放在缓冲区中,利用延迟算法等待输出的数据分组

c.TCP慢启动
起初会限制连接的最大速度,然后数据成功传输,随着时间的推移会提高传输的速度

d.Nagle算法与TCP_NODELAY
.应用程序可以将任意大小的数据放入TCP栈中,但如果TCP将大量小数据放入TCP栈中会严重影响网络性能
.Nagle算法试图在发送数据之前将大量TCP数据绑定在一起
.只有其他分组都确认以后,Nagle算法才会发送非全尺寸的分组
.小的http报文无法填满一个分组,Nagel算法会进行等待那些永远不会到来的额外数据而产生延迟,影响性能
.Nagle算法会阻止数据的发送,直到有数据分组为止
.HTTP应用程序会设置TCP_NODELAY来禁用Nagle算法

e.TIME_WAIT累积与端口耗尽
.TCP会在内存中维护一个小的控制块并且存储最近所关闭的IP地址和端口号,这类信息会维持2秒钟(2MSL),以处理连接关闭4步中的任一步
丢失的情况
.客户端每次连接上服务器时都会获得一个新的源端口,以实现连接的唯一性

三、HTTP连接的处理
1.常被误解的Connection首部
a.Connection首部可以承载3种不同类型的标签
.HTTP首部字段名,列出了只与此连接有关的首部
.任意标签值,用于描述此连接的非标准选项
.值close,说明完成此操作之后需关闭这条持久连接

b.HTTP应用程序收到带有Connection首部的请求时,接收端会解析发送的请求,在转发给下一跳之前删除Connection首部

2.串行事务处理延时
a.并行连接
通过多条TCP连接发起并发的HTTP请求

b.持久连接
重用TCP连接,以消除连接及关闭的延时

c.管道化连接
通过共享的TCP连接发起并发的HTTP请求

d.复用的连接
交替传送请求和响应

四、并发连接
HTTP允许客户端打开多条连接,并行的执行多个HTTP连接(可以在多台服务器上进行连接)

1.并行连接可能会提高页面的加载速度

2.并行连接不一定快
.客户端网络带宽不足
.打开大量连接会消耗很多内存资源,从而引发自身的性能问题
.浏览器会将并发连接数限制为一个较小的值

五、持久连接
.应用程序发起同一台服务器的多次连接
.HTTP11允许HTTP设备在事务处理结束之后仍然保持正在打开的状态

1.持久以及并行连接
a.并行连接缺点
.每个事务都会打开/关闭一条新的连接,会耗费时间和带宽
.由于TCP慢启动的存在,每条新连接的性能都会降低
.可打开的并行连接数量实际上是有限的

b.持久连接的两种类型
HTTP/1.0 + keep-Alive连接
HTTP/1.1 + persistent连接

2. HTTP/1.0 + keep-Alive连接

3.Keep-Alive操作
客户端包含Connection:Keep-Alive首部,如果服务器愿意为下一条连接请求保持打开状态,就在响应中包含相同的首部,如果没有,客户端
会在发送响应报文后关闭连接

4.Keep-Alive选项
.timeout
服务器希望将连接保持在活跃状态的时间
.max
服务器还希望为多少个事务保持此连接的活跃状态

5.持久连接
HTTP1.1默认支持持久连接
要在事务完成后关闭连接可以在首部加入Connection-Close

6.持久连接的限制和规则
.发送了Connection-Close首部后,客户端就无法在那条连接上发送更多请求了
.只有当实体部分的长度和相应的Content-Length一致,或者用分块传输编码连接才能保
持持久连接
.HTTP1.1的代理能够分别管理与客户端和服务器的持久连接,每个持久连接只适合于一
跳传输
.HTTP1.1设备可以在任意时刻关闭连接
.HTTP1.1应用程序必须能够从异步关闭中恢复过来

六、管道化连接
将多条请求放入队列,当第一条请求发送时,第二、三条请求跟着发送

七、关闭连接的奥秘
1.正常关闭连接
a.完全关闭与半关闭
完全关闭:关闭TCP连接的输入输出(close())
半关闭:关闭输入或输出的一边(shutdown)

b.TCP关闭及重置错误
关闭连接的输出信道总是安全的
关闭连接的输入信道不安全,当另一端向其发送数据时,会产生TCP连接重置,并会清空操
作系统缓冲区

c.正常关闭

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache POI使用详解

1.POI结构与常用类(1)POI介绍Apache POI是Apache软件基金会的开源项目&#xff0c;POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 .NET的开发人员则可以利用NPOI (POI for .NET) 来存取 Microsoft Office文档的功能。(2)POI结构说明包名称 说明HSSF 提供读写M…

Http协议(3)—HTTP实体和编码

HTTP实体实现目标.可以被正确识别(通过Content-Type和Content-Launage).可以被正确解包(通过Content-Lenght首部和Content-Encoding首部).是最新的(通过实体验证码和缓存过期控制).符合用户需要(基于Accept系列的内容协商首部).在网络上可以快速有效的传输(通过范围请求、差异编…

架构之美—软件架构6大步骤(开篇)

1> 需求分析2> 领域建模3> 确定关键需求4> 概念架构设计5> 细化架构设计6 架构验证 转载于:https://www.cnblogs.com/kool/p/6695766.html

Http协议(2)—客户端的识别与cookie机制

一、Http用户识别的机制1.承载用户身份的http首部2.客户端IP地址跟踪,根据客户端IP地址进行识别3.用户登录,用认证方式识别用户4.胖URL&#xff0c;一种在URL中嵌入识别信息的技术5.cookie,一种持久身份识别技术二、HTTP首部1.From包含用户的Email地址2.User_Agent将用户所用浏…

经典PCB软件比较阐述—Cadence和Mentor(整理)

PCB(Printed Circuit Board&#xff09;设计软件经过多年的发展、不断地修改和完善&#xff0c;或优存劣汰、或收购兼并、或强强联合&#xff0c;现在只剩下Cadence和Mentor两家公司独大。 Cadence公司的推出的SPB(Silicon Package Board)系列&#xff0c;原理图工具采…

RHEL 集群(RHCS)配置小记 -- 文档记录

1、RHEL 6 集群配置官方管理手册 https://access.redhat.com/site/documentation/zh-CN/Red_Hat_Enterprise_Linux/6/pdf/Cluster_Administration/Red_Hat_Enterprise_Linux-6-Cluster_Administration-zh-CN.pdf 2、官方讲解Fencing设备原理 https://access.redhat.com/documen…

Http协议(5)—HTTP摘要认证

一、摘要认证的改进1.用摘要保护密码客户端不发送密码,而是发送一个摘要&#xff0c;服务端只需验证这个摘要是否和密码相匹配2.单向摘要a.摘要是一种单向函数,将无限的输入值转化为有限的b.常见的摘要为MD5&#xff1a;将任意长度的字节序列转换为一个128位的摘要;MD5的128位摘…

c#常用正则表达式

public class RegexUtil {private RegexUtil() { }private static RegexUtil instance null;/// <summary>/// 静态实例化单体模式/// 保证应用程序操作某一全局对象&#xff0c;让其保持一致而产生的对象/// </summary>/// <returns></returns>publi…

Http协议(4)—HTTP认证机制

一、认证1.HTTP质询/响应认证框架服务器收到一条请求并没有按照请求执行动作,而是以一个认证质询执行响应,要求用户提供一个保密信息说明他是谁,当用户再次发送请求时要附上保密证书,如果证书匹配则执行请求,否则返回一条错误信息2.认证协议与首部官方的两个认证协议:基本认证、…

C#加密解密DES字符串转

using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptography; using System.IO;namespace Component {public class Security{public Security(){ }//默认密钥向量private static byte[] Keys { 0x12, 0x34, 0x56, 0x78, 0x90, …

Http协议(6)—安全HTTP

一、保护HTTP的安全1.功能:.服务器认证:客户端知道它是在与真正的服务器进行通信.客户端认证:服务器知道它是在与真正的客户端进行通信.完整性:服务器与客户端的数据不会被修改.加密:客户端与服务器的对话是私密的,不会被窃听.效率:运行足够快的算法.普适性:所有客户端和服务器…

restful处理

重写/覆盖 HTTP 方法 一些HTTP客户端仅能处理简单的的GET和POST请求&#xff0c;为照顾这些功能有限的客户端&#xff0c;API需要一种方式来重写HTTP方法. 尽管没有一些硬性标准来做这事&#xff0c;但流行的惯例是接受一种叫 X-HTTP的请求头&#xff0c;重写是用一个字符串值…

Http协议(7)—Http缓存

一、冗余的数据传输有些客户端访问服务器页面时,服务器会多次响应同一个页面的副本给客户端&#xff0c;这会产生冗余数据&#xff0c;故使用缓存就可以保留第一条相应的副本&#xff0c;以后就响应缓存的数据二、带宽瓶颈在需要下载大型文件时,如果在局域网中放入该文件的一个…

Apache JMeter--网站自动测试与性能测评

Apache JMeter--网站自动测试与性能测评2013-02-28 15:48:05标签&#xff1a;JmeterFrom:http://bdql.iteye.com/blog/291987 出于学习热情&#xff0c;翻译总结Emily H. Halili的《Apache JMeter》一书的部分内容。 JMeter的简介 可以肯定的是&#xff0c;JMeter至少符合以下几…

Linux 重命名文件

inux下重命名文件或文件夹的命令mv既可以重命名&#xff0c;又可以移动文件或文件夹. 例子&#xff1a;将目录A重命名为B mv A B 例子&#xff1a;将/a目录移动到/b下&#xff0c;并重命名为c mv /a /b/c 其实在文本模式中要重命名文件或目录的话也是很简单的&#xff0c;我们只…

苦逼的.net程序员, 转行高富帅iOS移动开发

先知先觉,后知后觉 **- 在做了两三年.net开发后, 还是感觉.net不是那么牛逼, 许多给我一起搞.net的同学, 不是去做了android, 就是去做了iOS, 或者java; 这让我对.net的前景有了一些动摇, 在三思考之后,还是决定放弃.net ,理由很简单,就是工资有点低; 由于蓝鸥iOS培训机构,一…

C# DataTable的詳細使用方法

在项目中经经常使用到DataTable,假设DataTable使用得当&#xff0c;不仅能使程序简洁有用&#xff0c;并且可以提高性能&#xff0c;达到事半功倍的效果&#xff0c;现对DataTable的使用技巧进行一下总结。 一、DataTable简单介绍 (1)构造函数 DataTable() 不…

mysql设置环境变量

-- 设置或修改系统日志有效期SET GLOBAL expire_logs_days8;SHOW VARIABLES LIKE %expire_logs_days%;-- 设置或修改系统最大连接数SET GLOBAL max_connections 2648;SHOW VARIABLES LIKE %max_connections%;-- 修改MYSQL自动编号步长SHOW VARIABLES LIKE %auto_increment%;SE…

CentOS7 编译安装LVS 互为主备 (实测 笔记 Centos 7.0 + ipvsadm 1.27 + keepalived 1.2.15 )

环境&#xff1a; 系统硬件&#xff1a;vmware vsphere (CPU&#xff1a;2*4核&#xff0c;内存2G&#xff0c;双网卡) LVS服务器&#xff08;两台&#xff09;&#xff1a; 系统&#xff1a;Centos7.0 64位&#xff08;LVSkeepalived&#xff09; LvsMaster:192.168.1.21 (主…

shell 执行mysql语句

<pre name"code" class"plain">#变量定义 sqlname"test.sql" dir"/sdb2/backup/mysql_db_backup/backup/databases" host"127.0.0.1" user"root" passwd"root" dbname"test" #导…