跨域是指一个域去访问另外一个域的资源。为了防止xSS、CSFR等攻击,所有的访问资源和请求,必须遵循同源策略(即"协议+域名+端口"三者相同),主要限制:Cookie、LocalStorage无法读取,AJAX 请求不能发送。 解决方案:
- 通过jsonp跨域
- document.domain + iframe;location.hash + iframe;window.name + iframe
- 跨域资源共享(CORS)
- postMessage跨域
- nginx代理跨域
- WebSocket协议跨域
具体操作如下:
jsonp 跨域
script标签src属性中的链接却可以访问跨域的js脚本,所以可以通过动态创建script,再请求一个带参网址实现跨域通信,缺陷是 必须是get请求。
$.ajax({ url: 'www.demo2.com:8080/login', type: 'get', dataType: 'jsonp', // 请求方式为jsonp jsonpCallback: "onBack", // 自定义回调函数名 data: {} });
跨域资源共享
只服务端设置Access-Control-Allow-Origin即可,前端无须设置,若要带cookie请求:前后端都需要设置 // 前端设置是否带cookie xhr.withCredentials = true;