Vue打包后处理跨域

我们都知道,在处理跨域时经常会用到jsonp,服务器端用到cors,或则本地测试用到nginx反向代理,vue开发模式的proxy等。当我们在自己开发的时候,可能会请求一些网上的接口,但是会遇到一些问题,比如不支持跨域的远程数据接口无法使用,那么要怎么解决呢,先从nginx说起,Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,它能够解决开发或则生产模式下的跨域,主要还是配置上的设置。

我们可以试试,我用的是windows系统的,下载链接,我是下载到了E盘,然后下载完解压

里面有个conf文件夹,然后用编辑器打开里面的nginx.conf,下面是对它进行跨域的配置,这些是主要参数,其他可以不用管。

 server {
        listen       8181; //端口
        server_name  localhost;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root  D:vue-websitedist; //路径
            try_files $uri $uri/ /index.html
            a#dd_header 'Access-Control-Allow-Origin' '*';
            index  index.html index.htm;
        }
  location /api/ {
               add_header 'Access-Control-Allow-Origin' '*';
               add_header 'Access-Control-Allow-Methods' 'POST,GET,OPTIONS';
               add_header 'Access-Control-Allow-Headers' 'Authorization';
               proxy_pass http://www.xxx.com/; //设置要代理的域名
         }

 配置完后启动nginx,start nginx

 

可以看到

这说明nginx运行OK,然后打开配置的端口,嘿嘿,运行成功,搞定

vue-cli3.0已经不需要配置过多的配置选项,vue.config.js就可以搞定,在本地开发中跨域的处理需要在config中配置proxy代理。配置如下

module.exports = {
        devServer: {
        proxy: {
            '/api': {
                target: 'http://xxx.xxx.xx',
                ws: true,  // proxy websockets
                changeOrigin: true,  // needed for virtual hosted sites
                pathRewrite: {
                    '^/api': ''  // rewrite path
                },
            },
        }
    }  
}

 如果是多个接口需要相应的加入。

vue打包后会生成一个dist文件,这里面是一些静态资源等,这个时候打开dist里面的html可能会出现空白页,这是因为打包时的路径问题,在config中设置baseUrl就可以解决了

const BASE_URL = process.env.NODE_ENV === 'prodution' ? '/' : './';

但是有些接口会出现跨域问题,打开控制台会看到No 'Access-Control-Allow-Origin' header is present on the requested resource.这种请求拦截信息。

这是因为同源策略的限制,在本地开发时我们在本地启用了一个node服务器,是它帮我们完成了相关的代理任务

那么打包后如何处理呢。这就要考虑到远程代理了,远程代理的网站很多,这里不做描述,它可以让不支持跨域的远程数据接口支持跨域

目标很遥远,但是如果你拼了命努力,即使到最后没有达到目标,但是你会发现,在某种程度上你已经成功了。
原文地址:https://www.cnblogs.com/Cavalary/p/10922216.html