注:每道题前面出现的(xx)数字代表这道题出现的频率。本计算机网络基础知识基于30+篇前端文章。问题及相应的答案、参考链接等。文章内容由拿到Offer的人整理整理。(3)问题:HTTP缓存HTTP缓存分为强缓存和协商缓存:首先通过Cache-Control验证是否有强缓存,如果有强缓存则直接读取缓存如果没有则进入协商缓存阶段并发起对于HTTP请求,服务器通过在请求头中包含条件请求字段If-Modified-Since和If-None-Match来检查资源是否更新:如果资源更新,则返回资源和200状态代码;如果资源没有更新,告诉浏览器服务器直接使用缓存获取资源(5)问:HTTP常见的状态码和使用场景有哪些?1xx:表示协议当前处于中间状态,需要后续请求2xx:表示请求成功3xx:表示重定向状态,需要重新请求4xx:表示请求报文错误5xx:服务器端错误常见状态码:101切换请求协议,从HTTP切换到WebSocket200请求成功,有响应体301永久重定向:会缓存302临时重定向:不会缓存304协商缓存命中403服务器访问禁止404资源找不到400请求错误500服务器端错误503服务器忙你知道302状态码是什么吗?你在浏览网页时遇到过哪些302场景?302表示临时重定向,这个资源只是暂时不能访问,但是过一段时间还是可以访问的。一般访问网站资源需要权限时,会要求用户登录,跳转到登录页面后登录后,就可以继续访问了。.301类似,会跳转到一个新的网站,但是301的意思是访问地址的资源已经被永久删除,以后不要再访问这个地址,搜索引擎会把旧的换成新的抓取时的地址。返回地址可以在返回响应的location头中获取。301的场景如下:比如从http://baidu.com,跳转到https://baidu.com域名被更改(2)问题:常用的HTTP请求方式有哪些,它们的区别和用途?http/1.1规定了以下请求方式:GET:一般数据获取HEAD:获取资源的元信息POST:提交数据PUT:修改数据DELETE:删除数据CONNECT:为代理服务器建立连接隧道OPTIONS:列出可以访问的请求方式对资源执行,常用于跨域TRACE:跟踪请求-响应传输路径()问:你是如何了解计算机网络的应用层、表示层、会话层、传输层、网络层、数据链路层、物理层(3)问:HTTPS是什么?具体过程HTTPS在HTTP和TCP之间建立了一个安全层。HTTP与TCP通信时,首先要经过一个安全层,对数据包进行加密,然后将加密后的数据包发送给TCP。相应的TCP必须解密数据包才能传递给上面的HTTP。浏览器传输client_random和加密方法列表。服务器收到后,向浏览器发送一个server_random、加密方式列表和数字证书(包括公钥),浏览器对数字证书进行合法验证。如果验证通过,则生成一个pre_random,然后用公钥加密后发送给服务器。服务端使用client_random、server_random、pre_random生成一个使用公钥加密的secret,然后在后续传输中使用这个secret作为数据加解密的秘钥。(4)问题:为什么三次握手和四次握手需要三次握手:为了确认对方的发送和接收能力。三向握手三向握手的主要过程:一开始,双方都处于CLOSED状态,然后服务端开始监听一个端口,进入LISTEN状态,然后客户端发起连接,发送SYN,然后自己改成SYN-SENT,seq=xserver收到后,返回SYNseq=yandACKack=x+1(对于client发送的SYN),变成SYN-REVD,client发送ACKseq=x+1,ack=y+1再次给服务器,变成EASTABLISHED状态,服务器收到ACK,同样进入ESTABLISHEDSYN,需要对端确认,所以ACK的序列化需要增加一、TCP报文的序列化需要一次性消费。为什么不是两次??无法确认客户端的接收能力。如果客户端先发了一个SYN包,但是一直在网络中,TCP认为这个包丢失了,然后重传,两次握手就建立了连接。等到客户端关闭连接。但是如果数据包到达服务器的时间晚了,服务器收到了,然后发送对应的数据表,链接就建立了,但是此时客户端已经关闭了连接,造成了链接资源的浪费。为什么不是四次?四次以上可以,三遍就够了。4次挥手一开始都是ESTABLISH状态,然后client发送seq=p的FIN报文,状态变为FIN-WAIT-1service终端收到后发送ACK确认,ack=p+1,然后进入CLOSE-WAIT状态。客户端收到后进入FIN-WAIT-2状态。过一会,等待数据处理完毕,再次发送FIN,ACK,seq=q,ack=p+1,进入LAST-ACK阶段。客户端收到FIN后,客户端收到后进入TIME_WAIT(等待2MSL),然后向服务器发送ACK。ack=1+1,server收到后进入CLOSED状态,此时client还需要等待两个MSL。如果没有收到服务器的重发请求,说明ACK成功到达。SegementLifetime):因为如果不等待,如果服务端还有很多数据包要发送给客户端,此时客户端端口被新的应用程序占用,那么就会收到无用的数据包,造成数据包混乱,所以最稳妥的办法就是等服务器发过来的数据包死了再开始新的应用。1个MSL保证4次wave中主动关闭方的最后一个ACK报文最终能到达对端。1MSL保证对端收不到ACK,所以重传的FIN报文可以到达4次而不是3次?**如果是3次,那么服务器的ACK和FIN合为一波,长delay可能会阻止TCP一个FIN到达服务器,然后让客户端继续重发FIN参考https://zhuanlan.zhihu.com/p/86426969问:不想断开怎么办交互过程中的连接?在HTTP中,响应体中的Connection字段被指定为keep-alive。你知道TCP滑动窗口吗?在TCP链路中,对于发送方和接收方,TCP需要将发送的数据放入发送缓冲区,将接收到的数据放入接收缓冲区。但是经常会出现发送方发送过多,接收方消化不了的情况,所以需要流量控制,也就是通过接收缓冲区的大小来控制发送方的发送。如果对方的接收缓冲区已满,则无法继续发送。而这个流控过程需要在发送端维护一个发送窗口,在接收端维护一个接收窗口。TCP滑动窗口有两种类型:发送窗口和接收窗口。参考https://juejin.im/post/5e527c58e51d4526c654bf41#heading-38Q:WebSocket和Ajax的区别本质上是不同的。Ajax是异步JavaScript和XML,是一种用于创建交互式Web应用程序的Web开发技术。websocket是基于HTML5的一种新协议,实现了浏览器和服务器实时通信生命周期的区别:websocket是一个长连接,发送和接收ajax后session会一直断开:AJAXclient发起WebSocket服务端和client相互推送了解WebSocket?长轮询和短轮询,WebSocket是长轮询。具体来说,比如在电商场景下,商品的库存可能发生变化,需要及时的反映给用户,所以客户端会不停的发送请求,然后服务端会不停的检查变化,无论变化如何都返回,这是短轮询。长轮询是指如果没有变化,则不返回,而是等待变化或超时(一般十几秒)再返回。如果没有返回,客户端就不需要一直发送请求,双方的压力都减轻了。.参考链接https://www.jianshu.com/p/3fc3646fad80HTTP如何实现长连接?什么时候超时?通过在header(requestandresponseheader)中设置Connection:keep-alive,HTTP1.0协议支持,但默认关闭。HTTP1.1协议之后,连接默认为长连接。HTTP通常有一个httpd守护进程,可以设置一个keep-alive超时时间。当tcp连接空闲时间超过这个时间,就会关闭。也可以在HTTP标头中设置。设置超时时间TCPkeep-alive包含三个参数,可以在系统内核的net.ipv4中设置:当TCP连接空闲,tcp_keepalive_time空闲时,会产生检测包。如果没有收到对方的ACK,则再次发送Everytcp_keepalive_intvl,直到发送完tcp_keepalive_probes,连接才会被丢弃。tcp_keepalive_intvl=15tcp_keepalive_probes=5tcp_keepalive_time=1800其实HTTP没有长链接和短链接之分,只有TCP有。TCP长连接可以复用一个TCP链接发起多个HTTP请求,可以减少资源消耗。比如请求HTML可能还需要Request后续的JS/CSS/图片等参考链接https://blog.csdn.net/weixin_37672169/article/details/80283935https://www.jianshu.com/p/3fc3646fad80Q:FetchAPI与传统Requestfetch的区别本着关注点分离,使用Promise,API更丰富,支持Async/Await。语义简单,更语义化。可以使用isomorphic-fetch,方便同构。参考资源https://github.com/camsong/blog/issues/2(2)问:POST一般可以发送什么类型的文件,文本、图片、视频、音频等数据处理问题可以是文本/image/audio/orapplication/json问:TCP如何保证有效传输和拥塞控制原则。TCP是面向连接的、可靠的,传输层通信协议的可靠性体现在:有状态、可控、有状态是指TCP会确认哪些消息被发送,哪些消息被接收者收到,哪些没有收到,保证数据包按顺序到达,不允许有错误。可控是指如果出现丢包或网络状况不佳,会跳转自己的行为,降低发送速度或重发,从而保证数据包的有效传输。拥塞控制原理的原因是整个网络环境可能特别差,很容易丢包,所以发送端要注意。主要使用三种方法:慢启动阈值+拥塞避免快速重传快速回复慢启动阈值+拥塞避免对于拥塞控制,TCP主要维护两个核心状态:拥塞窗口(cwnd)慢启动阈值(ssthresh)在发送端使用拥塞window来控制发送窗口的大小。然后采用保守的慢启动算法慢慢适应网络。在开始传输的这段时间内,发送端和接收端首先会通过三次握手建立连接,确定各自接收窗口的大小,然后初始化双方的拥塞窗口。然后,在每一轮RTT(发??送和接收延迟)之后,拥塞窗口的大小都会加倍,直到达到慢启动阈值。然后开始拥塞避免。拥塞避免的具体方法是之前每轮RTT将拥塞窗口加倍,现在每轮增加一个。快速重传在TCP传输过程中,如果发生丢包,接收端会重复之前的ACK。比如第5个包丢了,6和7到了,然后接收端会发送第一个ACK给5、6、7四个包的ACK。此时发送端收到三个重复的ACK。当它意识到数据包丢失时,它会立即重传而不等待RTO(超时重传时间)选择性重传:消息头可选地添加SACK属性,使用左边缘和右边缘标记那些数据包的到达,然后重新传输丢失的数据包以快速恢复。如果发送方收到3个重复的ACK,发现丢包,感觉当前网络状况已经过去,进入拥塞状态,就会进入快速恢复阶段:拥塞阈值会降低到拥塞窗口的一半,然后拥塞窗口的大小将成为拥塞阈值,然后拥塞窗口将线性增加以适应网络状况。问:OPTION有什么作用??举个使用OPTION的例子?目的是发送探测请求,判断对某个目标地址的请求必须有什么样的约束条件,然后根据约束条件发送真正的请求。例如跨域资源的预校验,首先使用HTTP的OPTIONS方式发送。用来处理跨域请求问:你知道http吗?协议的哪一层?(应用层)灵活可扩展,除了空格分隔单词和换行分隔字段外,没有任何限制,不仅可以传输文本,还可以可靠传输图片、视频等任意资源,基于TCP/IP,所以它继承了这个特性request-response,没有状态来回,每个HTTP请求都是独立的,不相关的,默认不需要保存上下文信息缺点:明文传输不安全多路复用一个TCP链接会导致head-to-head拥塞和无状态在长连接场景下,需要保存大量上下文,避免传输大量重复信息Q:OSI七层模型和TCP/IP四层模型应用层表示层会话层传输层网络层数据链路层物理层TCP/IP四层概念:应用层:应用层、表示层、会话层:HTTP传输层:传输层:TCP/UDP网络层:网络层:IP数据链路层:数据链路层、物理层(3)Q:TCP协议如何保证可靠性,UDP为什么不可靠?TCP是一种面向连接的、可靠的、传输层通信协议UDP是一种无连接的传输层通信协议,继承IP特性,基于数据报,TCP为什么可靠?TCP的可靠性体现在状态和控制上,会准确记录哪些数据被发送,哪些数据被对方收到,哪些没有收到,保证数据包按顺序到达,不允许出错,这是有状态的。当意识到丢包或网络环境不佳时,TCP会根据具体情况调整自己的行为,控制自己的发送速度或重传,这是可控的,而UDP是无状态不可控的HTTP2Improvement改进性能:headercompressionmultiplexingserver推送参考https://juejin.im/post/5d032b77e51d45777a126183
