1.跨域产生的原因:浏览器为了安全,遵循“同源策略”
2.cors比jsonp要强大,jsonp只支持get请求,cors支持所有http请求类型
3.cors的实现,需要浏览器和服务器同时支持,主要是服务器支持。
ps:目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。
4.跨域如何携带cookie,
服务端设置 Access-Control-Allow-Credentials: true,响应头会使浏览器允许在 Ajax 访问时携带 Cookie
客户端设置withCredentials:true 参数,实现携带 Cookie 的目标
5.jquery ajax实现cors携带cookie的写法
$.ajax({
type: 'get',
url: domain + '/api_m/api/user/favorite/get/status',
data: {
objId: this.data.objId,
objType: this.data.objType,
authorization: this.authorization
},
crossDomain: true, //设置跨域为true
xhrFields: {
withCredentials: true //默认情况下,标准的跨域请求是不会发送cookie的
},
success: function (result) {
},
error: function () {
}
});
6.axios实现cors携带cookie
axios.defaults.baseURL = process.env.VUE_APP_M_URL;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
axios.defaults.crossDomain = true;
axios.defaults.transformRequest = data => qs.stringify(data, { allowDots: true });
axios({
method: method.toLowerCase(),
url,
[modeKey]: obj || {},
withCredentials: true
})
.then((response) => {
resolve(response.data, url);
})
.catch((error) => {
reject(error);
});