前端面试易考题
http四次挥手
刚开始双方都处于 establised 状态,假如是客户端先发起关闭请求,则:
-
第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于FIN_WAIT1状态。
-
第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 + 1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT状态。
-
第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。
-
第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 + 1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态
-
服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。
拆包策略
http1/2
zhuanlan.zhihu.com/p/163170664
http如何实现缓存
- 强缓存==>Expires(过期时间)/Cache-Control(no-cache)(优先级高) 协商缓存 ==>Last-Modified/Etag(优先级高)Etag适用于经常改变的小文件 Last-Modefied适用于不怎么经常改变的大文件
- 强缓存策略和协商缓存策略在缓存命中时都会直接使用本地的缓存副本,区别只在于协商缓存会向服务器发送一次请求。它们缓存不命中时,都会向服务器发送请求来获取资源。在实际的缓存机制中,强缓存策略和协商缓存策略是一起合作使用的。浏览器首先会根据请求的信息判断,强缓存是否命中,如果命中则直接使用资源。如果不命中则根据头信息向服务器发起请求,使用协商缓存,如果协商缓存命中的话,则服务器不返回资源,浏览器直接使用本地资源的副本,如果协商缓存不命中,则浏览器返回最新的资源给浏览器。
服务端推送
baijiahao.baidu.com/s?id=179708…
- SSE(Server-Sent Events)
- WebSocket
从输入url到页面渲染
- DNS 解析(dns缓存)
- 检查缓存(强缓存、协商缓存)
- 建立连接(三次握手、https TLS握手)
- 发送http请求
- 服务端返回
- 解析html css生成dom,cssom树
- 解析js
- 构建渲染树(浏览器将 DOM 树和 CSSOM 树结合,构建渲染树(Render Tree))
- 布局(浏览器根据渲染树计算每个元素的位置和大小,这个过程称为布局(或回流)
- 绘制(浏览器根据布局结果,将每个元素绘制到屏幕上,这个过程称为绘制(或重绘))
https TLS 握手
get 和 post 区别
1.GET在浏览器回退不会再次请求,POST会再次提交请求 2.GET请求会被浏览器主动缓存,POST不会,要手动设置 3.GET请求参数会被完整保留在浏览器历史记录里,POST中的参数不会 4.GET请求在URL中传送的参数是有长度限制的,而POST没有限制 5.GET参数通过URL传递,POST放在Request body中 6.GET参数暴露在地址栏不安全,POST放在报文内部更安全 7.GET一般用于查询信息,POST一般用于提交某种信息进行某些修改操作 8.GET产生一个TCP数据包;POST产生两个TCP数据包
commonjs/es6
CommonJS 和 ES Module 区别:CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用 blog.csdn.net/zzy7075/art…