同源
如果两个页面的协议,域名和端口都相同,则两个页面具有相同的源
同源策略
是浏览器提供的一个安全功能
限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制
浏览器规定,A网站的JavaScript,不允许和非同源的网站C之间进行资源交互
- 无法读取非同源网页的Cookie、localStorage和IndexedDB
- 无法接触非同源网页的DOM
- 无法向非同源地址发送Ajax请求
跨域
协议、域名和端口有一项不同,则是跨域
出现跨域的根本原因:浏览器的同源策略不允许非同源的URL之间进行资源的交互
浏览器对跨域请求的拦截
跨域请求可以正常发起,浏览器能正常接收到跨域响应的数据,然后因为存在同源策略,所以被拦截
如何实现跨域请求
JSONP和CORS
JSONP:出现早,兼容性好,只支持GET请求,不支持POST请求
CORS:出现晚,W3C标准,属于跨域Ajax请求的根本解决方案。支持GET和POST请求,缺点是不兼容低版本浏览器
JSONP
是JSON的一种使用模式,可用于解决主流浏览器的跨域数据访问问题
实现原理
由于浏览器同源策略的限制,网页无法通过Ajax请求非同源的接口数据,但是<script>标签不受浏览器同源策略的影响,可以通过src属性,请求非同源的js脚本,JSONP实现原理,就是通过<script>的src属性,请求跨域的数据接口,并通过函数调用的方式,接收跨域接口响应回来的数据
用jQuery发起JSONP请求自定义参数及回调函数名称
jQuery中JSONP的实现过程
也是通过<script>标签的src属性实现跨域数据访问,jQuery采用动态创建和移除<script>标签的方式,来发起JSONP数据请求
- 在发起JSONP请求时,动态向<header>中append一个<script>标签
- 在JSONP请求成功时,动态从<header>中移除刚才append进去的<script>标签
防抖策略
当事件被触发后,延迟n秒后再进行回调,如果在n秒后又被触发,则重新计时
实现输入框的防抖
节流
节流策略,可以减少一段时间内事件的触发频率
防抖和节流的区别
- 防抖:如果事件被频繁触发,防抖能保证只有最后一次触发生效,前面的触发会被忽略
- 节流:如果事件被频繁触发,节流能减少事件触发的频率,节流是有选择性的执行一部分事件