跨域
出现跨域的原因
浏览器出于安全考虑,有同源策略。也就是说,如果协议、域名或者端口有一个不同就是跨域,Ajax 请求会失败。
解决方法
JSONP
原理:
1. `script` 标签没有跨域限制
2. 设置一个预设回调函数
3. 请求结果(`js`内容)将实际结果作为参数传入预设回调函数,并调用
4. 回调函数接收到了实际请求结果
存在的问题:
1. 仅限于`get`请求
2. 需要后台配合解析和传回匹配回调函数的请求结果
cors
原理:
1. 在跨域且请求为非简单请求(自定义头、非简单 Content-Type、非简单方法、带凭证)时,浏览器会自动发送跨域请求预校验,后台配置有cors跨域资源共享时,请求直接成功
存在的问题:
1. 多出一个预校验请求:`option`
2. 后端服务设置的`Access-Control-Max-Age`头部过期时将会重新发送预校验请求
