目录
★★★★ 说一下http缓存策略,有什么区别,分别解决了什么问题?
★★★ CDN 是什么?描述下 CDN 原理?为什么要用 CDN?
★★★ 为什么from表单提交没有跨域问题,但ajax有跨域问题
网络面试真题
★★★★ url从输入到渲染页面的全过程
- 浏览器构建HTTP Request请求, DNS解析URL地址、生成HTTP请求报文、构建TCP连接、使用IP协议选择传输路线
- 将请求通过网络传输到服务端 从客户机到服务器需要通过许多网络设备,一般包括集线器、交换器、路由器等
- 服务器构建HTTP Response响应,响应客户端的请求
- 将响应体的数据通过网络传输返回给客户端
- 浏览器渲染页面 解析HTML、CSS、JS,生成RenderTree渲染页面
★★★★ tcp三次握手,四次挥手,可靠传输原理
三次握手
- 第一次握手:客户端发送syn报文,并发送seq为x序列号给服务端,等待服务端的确认。
- 第二次握手:服务端发送syn+ack报文,并发送seq为Y的序列号,在确认序列号为x+1
- 第三次握手:客户端发送ack报文,并发送seq序列号为z,在确认序列号为y+1
四次挥手
- 第一次挥手:先由客户端向服务器端发送一个FIN,请求关闭数据传输。
- 第二次挥手:当服务器接收到客户端的FIN时,向客户端发送一个ACK,其中ack的值等于FIN+SEQ
- 第三次挥手:然后服务器向客户端发送一个FIN,告诉客户端应用程序关闭。
- 第四次挥手:当客户端收到服务器端的FIN是,回复一个ACK给服务器端。其中ack的值等于FIN+SEQ
★★★ `http200` 和 `302` 的区别
- http_200的意思是 成功处理了请求
- http_302的意思是(临时移动)服务器目前从不同位置的网页响应请求, 但请求者应继续使用原有位置来进行以后的请求。
★★★ 你知道哪些http首部字段?
| 首部字段名 | 说明 |
|---|---|
| Cache-Control | 控制缓存的行为 |
| Connection | 逐跳首部、连接的管理 |
| Date | 创建报文的日期时间 |
| Program | 报文指令 |
| Trailer | 报文末端的首部一览 |
| Transfer-Encoding | 指定报文主体的传输编码方式 |
| Upgrade | 升级为其他协议 |
| Via | 代理服务器的相关信息 |
| Warning | 错误通知 |
| Authorization | Web认证信息 |
★★★★ 说一下http缓存策略,有什么区别,分别解决了什么问题?
浏览器每次发起请求时,先在本地缓存中查找结果以及缓存标识,根据缓存标识来判断是否使用本地缓存,
如果缓存有效,则使用本地缓存。
向服务器发起请求并携带缓存标识。根据是否需向服务器发起HTTP请求,
将缓存过程划分为两个部分:强制缓存和协商缓存,强缓优先于协商缓存。
- 强缓存,服务器通知浏览器一个缓存时间,在缓存时间内,下次请求,直接用缓存,不在时间内,执行比较缓存策略。
- 协商缓存,让客户端与服务器之间能实现缓存文件是否更新的验证、提升缓存的复用率, 将缓存信息中的Etag和Last-Modified,通过请求发送给服务器,由服务器校验,返回304状态码时,浏览器直接使用缓存。
- 解决问题
1.减少了冗余的数据传输
2.减少了服务器的负担,大大提升了网站的性能
3.加快了客户端加载网页的速度
详情
★★★ 为什么浏览器要限制TCP的最大个数
- 建立一个tcp连接需要:1,socket文件描述符;2,IP地址;3,端口;4,内存
- 1、内存资源: 一个tcp连接最小占用内存为4096+4096 = 8k, 那么对于一个8G内存的机器,在不考虑其他限制下, 最多支持的并发量为:810241024/8 约等于100万, 在实际中,由于linux kernel对一些资源的限制, 加上程序的业务处理,所以,8G内存是很难达到100万连接的
- 2、CPU资源
★★★ HTTP2.0的特点
HTTP2.0大幅度的提高了web性能,在HTTP1.1完全语意兼容的基础上,进一步减少了网络的延迟。
1、二进制分帧
2、多路复用
3、首部压缩
4、流量控制
5、请求优先级
6、服务器推送★★★ 说一下HTTP2 多路复用原理,以及多路复用优势?
- 第一个:串行的文件传输。当请求a文件时,b文件只能等待,等待a连接到服务器、 服务器处理文件、服务器返回文件,这三个步骤。我们假设这三步用时都是1秒, 那么a文件用时为3秒,b文件传输完成用时为6秒,依此类推。 (注:此项计算有一个前提条件,就是浏览器和服务器是单通道传输)
- 第二个:连接数过多。我们假设Apache设置了最大并发数为300,因为浏览器限制,
浏览器发起的最大请求数为6,也就是服务器能承载的最高并发为50,
当第51个人访问时,就需要等待前面某个请求处理完成。
★★★ 简述https原理,以及与http的区别
- HTTP协议工作在80端口,HTTPS协议工作在443端口
- HTTPS需要申请证书(用于验证服务器身份)
- HTTP在TCP三次握手建立连接之后即可开始传输数据;HTTPS协议则需要在建立TCP连接之后客户端与服务器在进行SSL加密,确定对话密钥,完成加密后才开始传输数据。
- HTTPS协议传输是密文,HTTP协议传输是明文
★★★ CDN 是什么?描述下 CDN 原理?为什么要用 CDN?
CDN的全称是Content Delivery Network,即内容分发网络 共有云厂商在全世界各地都遍布不计其数都数据中心和服务器, CDN服务简单来讲就是这些厂商将你的服务器上面的文档分发到他们不同地区的服务器的当中, 每个地区可以称为一个节点,这样用户在访问你的网址时, 浏览器发送的请求就会优先绕去离客户最近的节点来获取数据, 这样方便客户更快的速度访问网站。 CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器, 通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容, 降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。★★★ DNS 查询的过程,分为哪两种,是怎么一个过程
- 1、分布域名解析 是指分在客户端上维护一个静态的文本文件,其中包含主机名和IP地址的映射。 随着网络规模的扩大,分布式分辨率的有效性越来越低。
- 2、集中式域名解析 要求网络中有多台DNS服务器,负责维护域名/IP地址映射数据库。 客户端从指定的服务器获取域名的地址信息。一旦客户端指定的DNS服务器不包含相应的数据, DNS服务器就会在网络中进行递归查询,并获取其他服务器上的地址信息。
★★★ 强缓存和协商缓存的区别
强缓存(本地缓存):直接使用本地的缓存,不用跟服务器进行通信
相关header字段
- expires
一个未来时间,代表请求有效期,没有过期之前都使用当前请求。 - cache-control
no-cache:不使用本地缓存。向浏览器发送新鲜度校验请求
pubilc:任何情况下都缓存(即使是HTTP认证的资源)
private:只能被终端用户的浏览器缓存,不允许CDN等中继缓存服务器对其缓存
no-store:禁止浏览器缓存数据,也禁止保存至临时文件中,每次都重新请求,多次设置 cache-control,优先级最高协商缓存:将资源一些相关信息返回服务器,让服务器判断浏览器是否能直接使用本地缓存,整个过程至少与服务器通信一次
相关header字段
- Last-Modified/If-Modified-Since(两个都是时间格式字符串)
- 浏览器第一次发请求,服务器在返回的 respone 的 header 加上 Last-Modified,表示资源的最后修改时间
- 再次请求资源,在 requset 的 header 加上 If-Modified-Since ,值就是上一次请求返回的 Last-Modified 值
- 服务器根据请求传过来的值判断资源是否有变化,没有则返回 304,有变化就正常返回资源内容,更新 Last-Modified 的值
- 304 从缓存加载资源,否则直接从服务器加载资源
- Etag/If-None-Match
- 与 Last-Modified/If-Modified-Since 不同的是,返回 304 时,ETag 还是会重新生成返回至浏览器。
★★★ 为什么from表单提交没有跨域问题,但ajax有跨域问题
浏览器的策略本质是:一个域名下面的JS,没有经过允许是不能读取另一个域名的内容,但是浏览器不阻止你向另外一个域名发送请求。 所以form表单提交没有跨域问题,提交form表单到另外一个域名,原来页面是无法获取新页面的内容,或者说form提交后不需要返回,但是ajax是需要返回的。 而ajax是想要读取响应内容,浏览器是不允许你这么做的。 浏览器的安全策略限制的是js脚本,并不限制src,form表单提交之类的请求, 就是说form表单提交不存在安全问题,ajax提交跨域存在安全问题。