在讲http知识之前,有必要提及下网络七层协议OSI(Open System Interconnect)的缩写
犹如水浒里面的七星聚义,没这七星,就没有108将。(已经放置文章最后面)
2. 减少http请求次数原因在于
1、Http连接 RequestHeader 的开销
众所周知,后端不管是java还是php,都能使用类似htppRequest .getHeader(“XXX-XXX”)方法。为什么呢?这是因为每次请求都会带上一些额外的信息Request Header,所以当请求越多的时候,在网络上传输的数据自然就多,传输速度自然就慢了。
其实request自带的数据量还是小问题,毕竟request能带的数据量还是有限的。
2、http连接的流程串行请求限制(2-8个)
- 域名解析 =》2. 开启TCP连接 =》3. 发送请求 =》4. 等待(主要包括网络延迟和服务器处理时间) =》5. 下载资源 =》6. 文件解析执行时间 在http1.1,keep-alive是默认的,而且现代浏览器都有DNS缓存, 所以DNS寻址由于有DNS缓存–无差别; 3次握手由于有keep-alive,一条和一千条都只需一次TCP握手–无差别
HTTP1.1协议规定请求只能串行发送,这也是HTTP性能最差和最让人诟病的地方,也就是说一百个请求必须依次逐个发送。第80个请求必须依赖于第79个请求正常返回之后才能发送。这样就平白无故多出了99个网络RTT(网络延迟)。 浏览器通过一个TCP连接发送100个请求的事情根本就不可能发生。
当你有100个资源时,这100个资源在浏览器看来是“同时都要”,而浏览器并没有什么智商去判断应该用1个链接解决这100个资源,还是用100个链接来解决,不然浏览器永远都只有一个TCP链接了。
因此浏览器的静态的策略是在自己可承受的范围内尽可能地用多的链接来解决,大部分浏览器似乎是2-8个链接,这就导致握手也是2-8次。
HTTP 连接个数(服务器默认最大连接数 16,777,214)
3、http请求少了,DNS 查询自然就少了,真的被百度里面千篇一律感动了。
http连接串行请求限制(2-8个)
2.1. 第一层:物理层(Physical)
规定通信设备的功能的和过程的特性,统一物理设备的参数,用以建立、维护和拆除物理链路连接
2.2. 第二层:数据链路层(Data Link)
数据链路可以粗略地理解为数据通道。 媒体是长期的,连接是有生存期的.在连接生存期内,收发两端可以进行不确定次数据通信. 每次通信都要经过建立通信联络和拆除通信联络两过程.这种建立起来的数据收发关系就叫作数据链路.
2.3. 第三层:网络层(Network)
网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送, 那在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路, 也可能还要经过很多通信子网。
2.4. 第四层:传输层(Transport)
传输层是两台计算机经过网络进行数据通信时,第一个端到端的层次,具有缓冲作用。第四层的数据单元也称作数据包(packets) 示例:TCP,UDP,SPX。
2.5. 第五层:会话层(Session)
会话层提供的服务可使应用建立和维持会话,并能使会话获得同步。会话层使用校验点可使通信会话在通信失效时从校验点继续恢复通信。这种能力对于传送大的文件极为重要。
2.6. 第六层:表示层(Presentation)
表示层的作用之一是为异种机通信提供一种公共语言,以便能进行互操作。它将欲交换的数据从适合于某一用户的抽象语法,转换为适合于OSI系统内部使用的传送语法。即提供格式化的表示和转换数据服务。数据的压缩和解压缩, 加密和解密等工作都由表示层负责,这种类型的服务之所以需要,是因为不同的计算机体系结构。 例如,IBM主机使用EBCDIC编码,而大部分PC机使用的是ASCII码。在这种情况下,便需要会话层来完成这种转换。
2.7. 第七层:应用层(Application)
应用层为操作系统或网络应用程序提供访问网络服务的接口。应用层协议的代表包括:Telnet、FTP、HTTP、SNMP
原文出自 :刘俊斌 ([email protected]) 转载请务必注明出处,否则追究法事(责任)