zoukankan      html  css  js  c++  java
  • Vue项目中解决跨域问题

    背景:由于浏览器的同源政策,在不同协议、域名、端口时进行数据访问将会出现跨域问题

    常见的解决方式有以下几种

    jsonp跨域

    利用script天然的跨域属性进行跨域操作

    jquery ajax实现

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

    proxy代理

    原理

    因为客户端请求服务端的数据是存在跨域问题的,而服务器和服务器之间可以相互请求数据,是没有跨域的概念(如果服务器没有设置禁止跨域的权限问题)

    也就是说,我们可以配置一个代理的服务器可以请求另一个服务器中的数据,然后把请求出来的数据返回到我们的代理服务器中,代理服务器再返回数据给我们的客户端,这样我们就可以实现跨域访问数据。

    所以proxy的原理是 将域名发送给本地的服务器(启动vue项目的服务,loclahost:8080),再由本地的服务器去请求真正的服务器。

    背景

    在配置axios时通常会配置baseUrl,即

     axios.defaults.baseURL = 'http://××××××××××××/' // 默认地址
    

    于是在写axios时就可以省略基地址,例如

    import axios from '@/utils/myaxios'
    export function dictListByType (dictType) {
      return axios({
        // url: '/user/login',
        url: 'dict/get/dictListByType',
        params: {
          dictType
        }
      })
    }
    

    此时需要做的修改如下

    axios.defaults.baseURL = '/api'//作用是我们每次发送的请求都会带一个/api的前缀。
    

    再在vue.config.js中进行配置

    module.exports = {
       devServer: {
         proxy: { // 配置跨域
           '/api': {
             target: 'http://172.16.25.174:8043', // 这里后台的地址模拟的;应该填写你们真实的后台接口
             changOrigin: true, // 允许跨域
             pathRewrite: {
               '^/api': ''
             }
           }
         }
       },
      publicPath: './',
      lintOnSave: false,
      productionSourceMap: false
    }
    
    
  • 相关阅读:
    NET开发中的事务处理大比拼
    gridview 导出Excel
    项目 心得
    设计模式Prototype原型模式
    设计模式Memento 备忘录模式
    设计模式Chain Of Responsibility 职责链模式
    设计模式Composite组合模式
    .NET常用功能和代码[总结与收藏]
    SQL SERVER函数——表值函数的处理
    设计模式学习笔记 简单工厂模式
  • 原文地址:https://www.cnblogs.com/axu1997/p/13609152.html
Copyright © 2011-2022 走看看