跨域:
协议+主机+端口
JSONP跨域
原理,利用<script>标签没有跨域限制。
WebSocket协议跨域
WebSocket 是一种基于 TCP 协议的双向通信协议,它提供了一种浏览器和服务器之间实时、低延迟、高效率的全双工通信方式,同时允许跨域通讯。
跨域资源共享(CORS)
CORS(Cross-Origin Resource Sharing)是一种机制,用于允许浏览器向跨源服务器发送 XMLHttpRequest 请求,从而克服浏览器的同源限制。
nginx代理跨域
nginx代理跨域,实质和CORS跨域原理一样,通过配置文件设置请求响应头Access-Control-Allow-Origin…等字段。
nodejs中间件代理跨域
node中间件实现跨域代理,原理大致与nginx相同,都是通过启一个代理服务器,实现数据的转发
浏览器从输入URL到页面渲染加载的过程(浏览器知识体系整理
- 浏览器接收url并开启一个新进程(这一部分可以展开浏览器的进程与线程的关系)
- 浏览器解析输入的 URL,提取出其中的协议、域名和路径等信息。(这部分涉及URL组成部分)
- 浏览器向 DNS 服务器发送请求,DNS服务器通过 多层查询 将该 域名 解析为对应的 IP地址 ,然后将请求发送到该IP地址上,与 服务器 建立连接和交换数据。(这部分涉及DNS查询)
- 浏览器与服务器建立 TCP 连接。(这部分涉及TCP三次握手/四次挥手/5层网络协议)
- 浏览器向服务器发送 HTTP 请求,包含请求头和请求体。(4,5,6,7包含http头部、响应码、报文结构、cookie等知识)
- 服务器接收并处理请求,并返回响应数据,包含状态码、响应头和响应体。
- 浏览器接收到响应数据,解析响应头和响应体,并根据状态码判断是否成功。
- 如果响应成功,浏览器接收到http数据包后的解析流程(这部分涉及到html - 词法分析,解析成DOM树,解析CSS生成CSSOM树(样式树),合并生成render渲染树(样式计算)。然后layout布局,分层,调用GPU绘制等,最后将绘制的结果合成最终的页面图像,显示在屏幕上。这个过程会发生回流和重绘)。连接结束 -> 断开TCP连接 四次挥手
原型链
原型链是 JavaScript 中实现继承的一种机制。
在 JavaScript 中,每个对象都有一个原型对象,对象可以通过原型链访问到其原型对象的属性和方法。当访问一个对象的属性或方法时,如果在该对象自身中找不到,就会沿着原型链向上查找,直到找到或者到达原型链的顶端(Object 的原型对象 null)。
防抖(Debounce):
- 含义:当持续触发一个事件时,在一定时间内没有再触发该事件,才会真正执行相应的函数。如果在这段时间内又触发了事件,则重新开始计时。
- 应用场景:
- 搜索框输入实时搜索建议,在用户输入过程中不断触发搜索请求,但只有当用户停止输入一段时间后才真正执行搜索。比如常见的电商网站搜索商品时,避免每输入一个字符就发送一次请求,减少不必要的网络请求。
- 窗口调整大小事件,当用户不断调整窗口大小时,不需要频繁地计算布局等操作,而是在用户停止调整一段时间后再进行处理。
节流(Throttle):
- 含义:在一定时间内,无论事件触发多少次,只执行一次函数。
- 应用场景:
- 鼠标滚动事件,在页面滚动时,可能需要实时计算一些与滚动相关的布局或者统计滚动次数等,但不需要每次滚动都进行处理,可以每隔一定时间(比如 100 毫秒)处理一次。
- 页面的高频点击场景,如点赞按钮,防止用户在短时间内多次点击导致重复操作,可以限制在一定时间内只响应一次点击。