结构化表达练习-浏览器为啥要限制请求访问数?

152 阅读3分钟

问题的开始

自从上学到现在,读到的关于http请求相关的书籍和文章,都会提到浏览器会限制同域的请求访问数,例如chrome会限制同域6。其实不止是同域的限制,对总的并发数也是有限制的,例如图1。

image.png 本图来自StackOverflow

问题的探索

昂贵的连接

1.得找

首先要明白一个事情,当我们访问一个http连接的时候,是一个给http连接的内容穿衣服的过程,

从应用层跑到传输层,再到网络层,再到数据链路层分别会被穿上一层层外衣。

一个http的过程是大致是这样的,首先会通过DNS (Domain name system)域名解析系统解析到你访

问的ip地址,拿到目标ip地址在,然后通过arp协议,解析到目标地址的mac地址,两端就可以进行下一

步了。

2.得连

好的现在我们来进行下一步了,因为现有http协议,不包括QUIC,http/3.0依赖tcp协议,此时呢

tcp进行三次握手

过程1,client ->  syn - > serve   您好我想和你玩连连看
过程2.serve ->  ack(行)、syn(我也想和你玩连连看) -> client 行,我也想和你玩连连看
过程3.client -> ack -> serve ok,莫问题

3.面向有连接-资源占用

在过程2中,client 接收到了serve的ack,就会占用一个资源等待着serve数据响应,过程3在收到client的ack后,serve同样也会占用一块资源等待着client的数据传输。然后两端就各被占用了1个端口号,这里要明确一点,端口号最多也就是65535个。

因为资源有限,所以才会有限制

客户端和服务端连接呢,无论是客户端和服务端都会占用资源来保持和你连接的状态,如果不限制连接连接服务端的数量,将会导致服务端会可能忙于和你打交道,而没办法和其他人打交道了。 DOS攻击就是基于这个出现的,想尽办法占用带宽和服务器的资源,导致服务端不能正常的工作。 另外,你听见过某些网站会偶尔会因为流量激增而导致的宕机事件么?

问题的总结

客户端和服务器,或者是服务器和服务器使用tcp协议连接通信都会消耗批次资源,而这些资源是有限的,刚刚我们连接上资源的占用阐述了这一观点。在日常开发中也应注意减少不必要的http请求。

题外:这是鄙人最近练习结构化表达的学习性文章,内容如有不严谨之处请各位看官海涵指证,小弟定当即刻修正。

参考文献

为什么你的浏览器会限制并发网络调用的数量?

《图解http》