浏览器
下面是常见的 浏览器 知识点:
1. 页面加载过程及原理 ⭐
实际上就是问,从输入URL到页面展示,这中间发生了什么?

解析地址:浏览器根据输入的URL,解析出域名、端口、协议、路径、参数等。
DNS解析:根据域名,查询对应的IP地址。
建立TCP连接:浏览器根据IP地址,建立TCP连接。
发送HTTP请求:请求指定的资源(涉及 3次握手)
服务器响应:服务器处理来自浏览器的请求,这可能涉及到查询数据库、处理应用逻辑等。服务器生成一个HTTP响应并发送回浏览器。
解析HTTP响应:浏览器根据HTTP响应,解析出HTML、CSS、JavaScript等资源。
渲染页面:构建DOM树,构建渲染树,JS逻辑处理,布局,绘制,显示完成的页面。
2. 前端缓存详解 ⭐

HTTP 缓存
强缓存:
彻底缓存,在缓存时间内不会向服务器发起请求,直接读取浏览器本地缓存,只有过期之后才会向服务器发起请求- 状态码:
200 - 谁来决定:
浏览器 - 缓存强度:F5 刷新无效,Ctrl+F5 刷新清空
- 存放位置:
Disk Cache(磁盘缓存)、Memory Cache(内存缓存) - 判断缓存:由
Expires、Cache-Control、Pragma这3个 Header 属性控制。
协商缓存:
- 协商缓存都会向
服务器发送请求,由服务器来确定缓存资源是否可用,所以客户端与服务器端要通过某种标识来进行通信。 - 状态码:
304 - 谁来决定:
服务器 - 缓存强度:F5 刷新和 Ctrl+F5 刷新都清空
- 判断缓存:由
Last-Modified / If-Modified-Since、ETag / If-None-Match这2个 Header 成对属性 控制。
浏览器缓存
- 默认缓存:
Bf Cache,页面前进后退行为,会将浏览器DOM状态保存进该缓存。 - 本地缓存:
- WebStorage:大小跟浏览器相关,一般是
5MBLocalStorage:本地持久化存储,只能被显式清除,数据可跨页面,跨浏览器SessionStorage:会话级别的临时存储,关闭页面清除,不可跨页面,跨浏览器
Cookie:主要用于用户信息的存储,自动在请求的时候被传递给服务器,大小4KBIndexDB:客户端数据库,大小无限。WebSql:提供 SQL 操作客户端数据库的 APIs- 离线缓存:
Application Cache:静态资源缓存,h5的新特性PWA:基于App Manifest、Service Worker、Push Notification,实现的渐进式Web应用技术
- WebStorage:大小跟浏览器相关,一般是
顶级理解:前端缓存揭秘:5年前端技术的必备知识点
3. 浏览器跨域 ⭐
定义
- 协议、域名、端口,只要有一个不同,就属于跨域
- 跨域条件:
协议不同(http 与 https)域名不同(baidu.com 与 google.com)端口不同(:8080 与 :80)
解决方案
CORS:跨源资源共享,在服务器端设置Access-Control-Allow-Origin等 HTTP 头部字段来告知浏览器哪些源可以访问该资源。(后端处理,常用解决方案一)。JSONP:JSONP 是一种利用 script 标签没有跨域限制的漏洞,通过动态创建 script 标签,设置其 src 属性为跨域 URL,然后执行该 URL 返回的 JavaScript 代码的一种跨域请求方式。不过,JSONP只支持 GET 请求。Nginx反向代理:利用 Nginx 作为反向代理服务器,将前端的请求经过 Nginx 服务器转发到目标服务器,再将目标服务器返回的响应返回给前端。(运维处理,常用解决方案二)WebSocket:WebSocket 是一种基于 TCP 协议的全双工通信协议,可以实现客户端和服务器之间长时间的双向通信。由于 WebSocket 不受同源策略的限制,因此可以用于跨域通信。postMessage:window.postMessage 方法可以在不同窗口的文档中进行跨域通信。例如,在一个窗口中使用 postMessage 方法发送消息,然后在另一个窗口中监听 message 事件来接收消息。- 设置
document.domain:对于主域相同但子域不同的跨域应用场景,可以通过设置相同的 document.domain 来使两个页面共享 Cookie,从而实现跨域通信。