02网络面经:一个tcp连接可以发送多少个http请求?

程序新视界 程序新视界     2023-01-11     430

关键词:

一个TCP连接可以发送多少个HTTP请求?就这这个问题,我们聊聊TCP、HTTP以及浏览器之间的关系和对请求处理的优化。

TCP与HTTP的渊源

我们知道TCP协议对应于传输层,HTTP协议对应于应用层。WEB项目中,HTTP协议是建立在TCP的基础上的。

最初浏览器从服务器加载一个网页,会发起一个HTTP请求,这时需要先建立一个TCP连接。当本次数据请求完毕之后,会立刻断开TCP连接。

但随着时间的推理,HTML网页内容越来越复杂,不仅有内容,还有JS、CSS和图片资源,每个资源的请求都建立一次TCP连接,效率就会很低。

这时,Keep-Alive就被提出用来了,专门用于解决效率低的问题。

本文关于TCP连接能够发送多少个HTTP请求,本质上就是围绕着解决通信的低效问题的。

下面我们通过几个常见的面试问题,来逐步揭开这其中包含的知识点。

问题一:浏览器建立TCP连接之后,完成一次HTTP请求,是否会断开?

HTTP协议Header中的Connection属性决定了连接是否持久,不同HTTP协议版本有所不同。

HTTP/1.0中Connection默认为close,即每次请求都会重新建立和断开TCP连接。缺点:建立和断开TCP连接,代价过大。

HTTP/1.1中Connection默认为keep-alive,即连接可以复用,不用每次都重新建立和断开TCP连接。超时之后没有连接则主动断开。可以通过声明Connection为close进行关闭。

优点:TCP连接可被重复利用,减少建立连接的损耗,SSL的开销也可以避免。刷新页面时也可以复用,从而不再建立SSL连接等。

结论:默认情况下(HTTP/1.1)建立TCP连接不会断开,只有在请求报头中声明Connection: close才会请求完成之后关闭连接。不断开的最终目的是减少建立连接所导致的性能损耗。

问题二:一个TCP连接可以对应几个HTTP请求?

如果Connection为close,则一个TCP连接只对应一个HTTP请求。

如果Connection为Keep-alive,则一个TCP连接可对应一个到多个HTTP请求。

问题三:一个TCP连接中,可以同时发送多个HTTP请求吗?

HTTP/1.1中单个TCP连接在同一时刻只能处理一个请求。HTTP/1.1在RFC 2616中规定了Pipelining来解决这个问题,但浏览器默认是关闭的。

RFC 2616中规定:一个支持持久连接的客户端可以在一个连接中发送多个请求(不需要等待任意请求的响应)。收到请求的服务器必须按照请求收到的顺序发送响应。

Pipelining本身存在一些问题,比如代理服务器不能正确处理HTTP Pipelining、Head-of-line Blocking连接头阻塞(首个请求耗时过长,阻塞其他请求)。所以,浏览器默认关闭该功能。

HTTP/2.0提供了多路复用技术Multiplexing,一个TCP可以并发多个HTTP请求(理论无上限,但是一般浏览器会有TCP并发数的限制)。

HTTP/1.1中为了提升性能,通常会采用连接复用和同时建立多个TCP连接的方式提升性能。

结论:HTTP/1.1中存在Pipelining技术支持一个连接发送多个请求,但存在弊端,浏览器默认关闭。HTTP/2.0中通过多路复用技术支持一个TCP连接中并发请求HTTP。

问题四:浏览器对同一Host建立TCP连接的数量有没限制?

不同浏览器限制不同,比如Chrome最多允许同一个Host可建立6个TCP连接。

如果服务器只支持HTTP/1.1,浏览器会采用在同一个Host下建立多个TCP连接来进行效率提升。如果是基于HTTPS传输,在SSL握手之后,还会尝试协商是否可以采用HTTP/2.0的Multiplexing功能。

问题五:keep-alive使用场景及优缺点

开启keep-alive对内存要求高,关闭keep-alive对CPU要求高;如果内存和CPU都足够,开启和关闭keep-alive对性能影响不大;如果考虑服务器压力,如果是静态页面,大量的调用js或者图片的话,建议开启keep-alive;如果是动态网页,建议关闭keep-alive。

注意事项:如果需要使用keep-alive功能,服务器端如果使用nginx中keepalive_timeout值要大于0。

小结

通过上面的整体分析,我们不仅了解了TCP与HTTP之间的关系,还明确了现代浏览器基于不同的HTTP协议所作出的网络层面优化。而HTTP2/0的多路复用机制还是一些高性能框架的基础,比如gRPC的实现。

博主简介:《SpringBoot技术内幕》技术图书作者,酷爱钻研技术,写技术干货文章。

公众号:「程序新视界」,博主的公众号,欢迎关注~

技术交流:请联系博主微信号:zhuan2quan



程序新视界”,一个100%技术干货的公众号


一个tcp连接可以发送多少个http请求?

一、现代浏览器与服务器建立了一个TCP连接后是否会在一个HTTP请求完成后断开?什么情况下会断开?默认情况下建立TCP连接不会端口,只有再请求报头中声明Connection:close才会再请求完成后关闭连接 二、一个TCP连接可以对应... 查看详情

一个tcp连接上为啥能发起多少个http请求?

在HTTP/1.0中,一个服务器在发送完一个HTTP响应后,会断开TCP链接。但是这样每次请求都会重新建立和断开TCP连接,代价过大。所以虽然标准中没有设定,某些服务器对Connection:keep-alive的Header进行了支持。意思是说,完成这个HTTP... 查看详情

面试官问我:一个tcp连接可以发多少个http请求?我竟然回答不上来

...先解决下面五个问题:现代浏览器在与服务器建立了一个TCP连接后是否会在一个HTTP请求完成后断开?什么情况下会断开?一个TCP连接可以对应几个HTTP请求?一个TCP连接中HTTP请求发送可以一起发送么(比如一... 查看详情

一个tcp连接可以发多少个http请求?

作者|松若章来源|https://zhuanlan.zhihu.com/p/61423830   曾经有这么一道经典面试题:从URL在浏览器被被输入到页面展现的过程中发生了什么?相信大多数准备过的同学都能回答出来,但是如果继续问:收到的HTML如果包含几十个... 查看详情

面试题:每发送一个http请求就要建立一个tcp连接吗(非持久连接/持久连接)

...连接二、TCP连接中多个HTTP请求可以并行发送吗?三、一个TCP连接可以发送多少个HTTP请求问题?一、非持久连接和持久连接非持久连接:HTTP/1.0中的首部字段Connection默认值为close,即每次请求都会重新建立和断开TCP... 查看详情

tcp连接与http请求(代码片段)

...顺序、建立了多少连接、使用什么协议被下载下来的呢?一个TCP连接可以发多个HTTP请求?要搞懂这个问题,需要先解决下面五个问题:现代浏览器在与服务器建立了一个TCP连接后是否会在一个HTTP请求完成后断开?什么情况下会... 查看详情

http2新特性

...源,能减少握手带来的延时,减少创建多个TCP连接带来的网络开销,提高吞吐量 3.多路复用  查看详情

一个tcp连接可以发多少个http请求(代码片段)

曾经有这么一道经典面试题:从URL在浏览器被被输入到页面展现的过程中发生了什么?相信大多数准备过的同学都能回答出来,但是如果继续问:收到的HTML如果包含几十个图片标签,这些图片是以什么方式、... 查看详情

一个tcp端口最多可以同时连接多少个客户端呢?

pp616(傻小子)   2003-12-0817:54:11在 C++Builder / 网络及通讯开发 提问最近服务器程序。用的socket api只接受连接什么事都不做。发现一个问题。服务器只能接受3900多个Client端再多了就Accept不了了。开始怀疑是服务器程序写... 查看详情

网络面经总结(代码片段)

...构的字节流;UDP是面向报文的 UDP没有拥塞控制,因此网络出现拥塞 查看详情

计算机网络面经之tcp协议(代码片段)

...端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到(滞留)。此时重新向服务器发送这条报文&# 查看详情

面试官问我:一个tcp连接可以发多少个http请求?我竟然回答不上来...(代码片段)

阅读本文大概需要5分钟。作者|松若章来源|https://zhuanlan.zhihu.com/p/61423830曾经有这么一道经典面试题:从URL在浏览器被被输入到页面展现的过程中发生了什么?相信大多数准备过的同学都能回答出来,但是如果继续问&#... 查看详情

web服务器可以处理多少个套接字连接?(代码片段)

...以连接到该网站,如果我想提供更多服务,我必须转移到网络农场吗?答案简而言之:您应该能够以数百万个同时活动的TCP连接和扩展HTTP请求的顺序实现。这可以告诉您使用正确配置的正确平台可以获得的 查看详情

【tcp】单台服务器并发tcp连接数到底可以有多少?

参考技术A长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持。长连接,是指通信双方有数据交互时,就建立一个TCP连接... 查看详情

一个tcp端口最多可以同时连接多少个客户端

...TCP连接。这个受本地环境(操作系统)的限制,我们知道一个tcp连接会占用系统中一个文件描述符,所以:1、打开多少个TCP连接会受到操作系统对进程所打开文件描述符数量的限制。ulimit-n2、操作系统自身也会对打开文件的总... 查看详情

http和socket的连接请求的区别

...议是基于TCP连接的TCP协议:对应于传输层IP协议:对应于网络层TCP/IP是传输层协议,主要解决数据如何在网络中传输;而HTTP是应用层协议,主要解决如何包装数据。Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用... 查看详情

tcp和http的区别

...因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。建立起一个TCP连接需要经过“三次握手”:第一次握手:客户端... 查看详情

socket,tcp,http三者之间的区别和原理

http、TCP/IP协议与socket之间的区别网络由下往上分为:物理层--数据链路层--网络层--IP协议传输层--TCP协议会话层--表示层和应用层--HTTP协议1、TCP/IP连接手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无... 查看详情