跨域

2021-05-20  本文已影响0人  my木子

跨域

同源策略

跨域场景

跨域解决方案

// 原生实现
    var script = document.createElement('script');
    script.type = 'text/javascript';

    // 传参一个回调函数名给后端,方便后端返回时执行这个在前端定义的回调函数
    script.src = 'http://www.api.com:8080/list?type=1&callback=handleCallback';
    document.head.appendChild(script);

    // 回调执行函数
    function handleCallback(res) {
        alert(JSON.stringify(res));
    }

// jquery
  $.ajax({
    url: 'http://www.api.com:8080/list',
    type: 'get',
    dataType: 'jsonp',  // 请求方式为jsonp
    jsonpCallback: "handleCallback",    // 自定义回调函数名
    data: {}
});

// vue.js
this.$http.jsonp('http://www.api.com:8080/list', {
    params: {},
    jsonp: 'handleCallback'
}).then((res) => {
    console.log(res); 
})
/// webpack.config.js
module.exports = {
    entry: {},
    module: {},
    ...
    devServer: {
        historyApiFallback: true,
        proxy: [{
            context: '/list',
            target: 'http://www.api2.com:8080',  // 代理跨域目标接口
            changeOrigin: true,
            secure: false,  // 当代理某些https服务报错时用
            cookieDomainRewrite: 'www.api1.com'  // 可以为false,表示不修改
        }],
        noInfo: true
    }
}
// 原生 ajax
xhr.withCredentials = true;
// IE8/9需用window.XDomainRequest兼容

// jQuery ajax
$.ajax({
    ...
   xhrFields: {
       withCredentials: true    // 前端设置是否带cookie
   },
   crossDomain: true,   // 会让请求头中包含跨域的额外信息,但不会含cookie
    ...
});

// Vue axios
axios.defaults.withCredentials = true

// Vue vue-resource
Vue.http.options.credentials = true
上一篇下一篇

猜你喜欢

热点阅读