zoukankan      html  css  js  c++  java
  • vue 本地和线上跨域的问题 个人解决方案

    产生跨域问题的原因

      跨域是因为浏览器的同源策略所导致的。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。浏览器引入同源策略主要是为了防止XSS,CSRF攻击。

    常见跨域问题的解决方式

    • 使用jsonp
    • 服务端代理
    • 服务端设置Request Header头中Access-Control-Allow-Origin为指定可获取数据的域名 

    本地开发模式

    如果是本地开发模式下 就没有必要再去麻烦后端去解决一下跨域问题。vue 本地开发提供了一个很好的解决跨域问题 请求转发

    如果是vue脚手架找到vue.config.js中配置,如果是自己搭的开发环境找到对应的配置文件(大部分应该都在config文件夹下的index.js)

      devServer: {
        proxy: {
          '/api': { //匹配api开头的走代理
            target: process.env.VUE_APP_BASE_API, // 接口地址
            changeOrigin: true,  //允许跨域
            pathRewrite: {
              '^/api': '' //重新路由,访问后端接口不一定是api 开头的这个时候就可以改变
            }
          }
        }
      },

    线上开发

    因为我们这边计划 前端统一打包分发多个地区,而不是各个地区分别去线上打包,提高版本发布效率,而且保证线上各个地区代码一致性.又因为各个地区接口地址也是独立的,所以接口地址不能写在配置文件中。

    所以在各个地区的nginx服务器做了代理转发。具体配置如下:

    server {
        listen 80;
        server_name 域名;
        root ####;
    
        location / {
          try_files $uri $uri/ /index.html;  //解决 HTML5 History 模式直接访问子路由404问题
        }
    
        location ^~/api/ {
    
          proxy_pass  域名或者ip地址:端口/; //匹配api开头的请求 端口后面加 / 请求的时候会把api去掉 不加 / 会带上完整的访问接口地址,这个可以和后端约定
    
        }
    
    }

    其他的跨域解决方案可以自行到网上搜搜 我这边只是把自己遇到的问题做个笔记

  • 相关阅读:
    js 仿 asp中的 asc 和 chr 函数的代码
    escape,encodeURI,encodeURIComponent
    从项目从SVN上check下来,用idea打开后,idea没有SVN的工具栏解决方法
    idea中导入SVN的项目时,连接失败,报“Cannot run program "svn"
    spring基础----事件(Applicaition Event)
    idea在导入项目时遇到的问题
    Spring基础---bean的初始化和销毁
    spring基础----EL和资源调用
    spring基础----Bean的Scope
    面试题-------------js三种信息框
  • 原文地址:https://www.cnblogs.com/qcwblog/p/12802508.html
Copyright © 2011-2022 走看看