一个TCP连接上面能发多少个HTTP请求?
这是一道关于浏览器与服务器交互的深入面试题,涉及到从URL输入到页面展现的全过程。让我们深入探讨一下其中的细节,特别是当页面包含多个图片标签时,这些图片是如何被下载和展现的。
关于第一个问题:现代浏览器在与服务器建立TCP连接后,是否会在一个HTTP请求完成后断开连接?答案是:默认情况下,TCP连接不会在一次HTTP请求完成后断开,除非请求报头中明确声明“Connection: close”。这种做法源于HTTP/1.1标准的持久连接特性,旨在提高网络效率,避免频繁建立和断开连接带来的开销。
接下来,第二个问题:一个TCP连接可以对应几个HTTP请求?答案是可以的。在维持TCP连接的情况下,一个TCP连接可以发送多个HTTP请求。这进一步证实了持久连接的优势,提高了数据传输的效率。
然后,第三个问题:在一个TCP连接中,HTTP请求是否可以一起发送(例如,一起发送三个请求,然后一起接收三个响应)?HTTP/1.1虽然支持在同一TCP连接中发送多个请求,但标准规定在同一时刻只能处理一个请求。这意味着任意两个HTTP请求的生命周期不能重叠。有一种技术叫做Pipelining,可以试图解决这个问题,但它在浏览器中的默认是关闭的。Pipelining允许客户端在一个TCP连接中发送多个请求,而不需要等待每个请求的响应。服务器必须按照接收请求的顺序发送响应。
至于第四个问题,为什么有时候刷新页面不需要重新建立SSL连接?这是因为SSL连接在建立后会被缓存和复用,而不仅仅是针对单个请求。当浏览器再次访问同一服务器时,如果之前的SSL连接仍然有效,它就会复用该连接,而不是重新建立。
关于浏览器对同一Host建立TCP连接的数量是否有限制?实际上,这个数量取决于许多因素,包括浏览器的实现、服务器的配置以及网络状况等。但通常,浏览器会尝试优化连接数量,以避免过多的同时连接影响性能。
从URL的输入到页面的展现,背后涉及了一系列复杂的网络交互和浏览器处理过程。理解这些有助于我们更深入地理解网页加载和渲染的机理。HTTP Pipelining这个设想虽然看起来很美好,但在实践中却会遇到很多问题。一些代理服务器无法正确处理HTTP Pipelining,导致正确的流水线实现变得复杂。有一种现象叫做Head-of-line Blocking(连接头阻塞),在建立TCP连接后,如果客户端连续发送多个请求,服务器必须按照收到请求的顺序返回结果。如果服务器在处理早期请求时花费大量时间,那么后面的所有请求都必须等待早期请求完成才能响应。
正因为这些问题,现代浏览器默认不开启HTTP Pipelining。HTTP2提供了Multiplexing(多路传输)特性,可以在一个TCP连接中同时完成多个HTTP请求。这是如何实现的又是另一个话题了。让我们看看使用HTTP2的效果。
在一张图中,绿色表示请求发起至响应返回的等待时间,蓝色表示响应的下载时间。可以看到所有的请求都在同一个Connection中并行完成。这就解决了我们的问题:在HTTP/1.1中,虽然有Pipelining技术可以同时发送多个请求,但由于浏览器默认关闭此功能,因此在实际中几乎不可行。而在HTTP2中,由于Multiplexing的存在,多个HTTP请求可以在同一个TCP连接中并行进行。
那么在HTTP/1.1时代,浏览器是如何提高页面加载效率的呢?主要通过以下两种方式:
1. 维持和服务器已经建立的TCP连接,在同一连接上顺序处理多个请求。
2. 和服务器建立多个TCP连接。
接下来回答一些具体问题:
第四个问题:为什么有时刷新页面不需要重新建立SSL连接?
在之前的问题讨论中已经有了答案。TCP连接有时会被浏览器和服务端维持一段时间。既然TCP不需要重新建立,SSL自然也会沿用之前的连接。
第五个问题:浏览器对同一Host建立TCP连接的数量有没有限制?
在HTTP/1.1时代,没有多路传输的情况下,如果浏览器需要下载一个包含几十张图片的网页,不能只开一个TCP连接顺序下载,那样用户会等待很长时间。但如果每张图片都开一个TCP连接发送HTTP请求,可能会使电脑或服务器承受不了。对于这个问题,答案是:有。例如Chrome对同一个Host最多允许建立六个TCP连接。不同浏览器在此方面的限制有所不同。
那么回到最初的问题,一个包含几十个图片标签的HTML是如何被下载下来的呢?
如果图片都是通过HTTPS连接并且在同一域名下,浏览器会在SSL握手之后与服务器协商是否可以使用HTTP2。如果可以,就使用Multiplexing功能在这个连接上进行多路传输。但并非所有挂在同一域名的资源都会使用一个TCP连接获取。
如果服务器不支持HTTP2或者只能使用HTTP/1.1怎么办?
这种情况下,浏览器会在一个HOST上建立多个TCP连接。这些连接的最大数量取决于浏览器的设置,并在空闲时被用来发送新的请求。如果所有连接都在忙碌状态,其他请求则需要等待。
网站seo
- 一个TCP连接上面能发多少个HTTP请求?
- 如果需要购买一个商标大概需要多少钱呢-
- 美国服务器租用100Gbps带宽费用解析:影响因素与
- 新手怎么玩好域名注册 域名注册里面的文化
- V社注册Steam.tv域名 准备进军直播领域
- 抢注域名怎么赚钱-好域名在哪抢注
- windows 搭建kms服务器激活_自建KMS激活服务器的技
- 域名实现自由人生的逆风寒翎分享绝佳干货!
- dns服务器怎么配置 dns服务器配置详解
- 服务器热备份与冷备份的区别:从基础原理到实
- 小米辟谣官微信息 保留追究造谣者刑事责任的权
- 浅谈WAF几种常见的部署模式
- 区块链应用栈的分享数据层
- 通过阿里云代理购买阿里云服务器常见问题
- 域名注册要多长时间?如何注册域名?
- 数字孪生三维可视化平台 工业未来的驱动力