0.服务端设置

app.use(function(req, res, next){
//设置跨域访问
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS'); if (req.method == 'OPTIONS') {
res.send(200); /*让options请求快速返回*/
}else {
next();
}
})

1.axios

axios中只能使用get和post方法来进行请求数据,没有提供jsonp等方法

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

1) 安装所需中间件和插件等,比如axios,http-proxy-middleware

2) 配置BaseUrl

在main.js中,配置数据所在服务器的前缀(即固定部分):

// 项目入口,配置全局vue
import Vue from 'vue'
import VueRouter from './router/routes.js'
import Store from './store/index.js' import './assets/less/index.less'
import App from './App.vue' import ElementUI from 'element-ui'
import 'element-ui/lib/theme-default/index.css' import axios from 'axios'
Vue.prototype.$axios = axios
axios.defaults.baseURL = '/api' //关键代码
Vue.config.productionTip = false Vue.use(ElementUI); new Vue({
router:VueRouter,
store:Store,
template:'<App/>',
components: {App}
}).$mount('#app')

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

3) 配置代理

在config文件夹下的index.js文件中的proxyTable字段中,作如下处理:

dev: {
env: require('./dev.env'),
port: 8090,
autoOpenBrowser: true,
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {
'/api': {
target:'http://api.douban.com/v2', // 你请求的第三方接口
changeOrigin:true, // 在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
pathRewrite:{ // 路径重写,
'^/api': '' // 替换target中的请求地址,也就是说以后你在请求http://api.douban.com/v2/XXXXX这个地址的时候直接写成/api即可。
}
}
},
// CSS Sourcemaps off by default because relative paths are "buggy"
// with this option, according to the CSS-Loader README
// (https://github.com/webpack/css-loader#sourcemaps)
// In our experience, they generally work as expected,
// just be aware of this issue when enabling this option.
cssSourceMap: false
}

4) 在具体使用axios的地方,修改url如下即可:

axios.get("/movie/top250").then((res) => {
res = res.data
if (res.errno === ERR_OK) {
this.themeList=res.data;
}
}).catch((error) => {
console.warn(error)
})
原文链接:https://blog.csdn.net/wh_xmy/article/details/87705840
//原请求地址:http://api.douban.com/v2/movie/top250

因为我们给url加上了前缀/api,我们访问/movie/top250就当于访问了:localhost:8080/api/movie/top250(其中localhost:8080是默认的IP和端口)。

在index.js中的proxyTable中拦截了/api,并把/api及其前面的所有替换成了target中的内容,因此实际访问Url是http://api.douban.com/v2/movie/top250。

5) 打包部署时,在config文件夹里面创建一个api.config.js的配置文件:

let serverUrl = '/api/'  //本地调试时
// let serverUrl = 'http://api.douban.com/v2/' //打包部署上线时
export default { dataUrl: serverUrl }

或者:

const isPro = Object.is(process.env.NODE_ENV, 'production')

console.log(isPro);

module.exports = {
baseUrl: isPro ? 'http://api.douban.com/v2/' : 'api/' }

6) 在main.js文件里面引入上面文件,这样就可以保证动态的匹配生产和开发环境的定义前缀了:

import Vue from 'vue'
import App from './App'
import router from './router'
import 'bootstrap/dist/js/bootstrap.min'
import 'bootstrap/dist/css/bootstrap.min.css'
import axios from 'axios'
import apiConfig from '../config/api.config' Vue.prototype.$axios = axios;
Vue.config.productionTip = false;
axios.defaults.baseURL = apiConfig.baseUrl;// 配置接口地址
axios.defaults.withCredentials = false;

2.jsonp

0) 原理:动态创建script标签,利用script标签的src属性可以获取任何域下的js脚本,通过这个特性(也可以说漏洞),服务器端不再返回json格式,而是返回一段调用某个函数的js代码,在src中进行了调用,这样实现了跨域。

核心是动态添加。自动帮你生成回调函数并把数据取出来供success属性方法来调用。

在所处的页面逻辑里写好一个函数,函数名与远程的js文件中的函数名一致。通过script的src属性访问远程js,并调用该函数,同时将需要的数据作为参数传过来,于是实现了跨域。
1) 执行命令:npm install vue-jsonp --save;
2) 添加到main.js中
import VueJsonp from 'vue-jsonp'
3) 使用
this.$jsonp('xxx.js',jsonParam).then(popData=>{
if(popData){//返回的数据格式为json
...
}
})

3.杂记

浏览器的同源策略拒绝跨域存取cookie

jsonp形式可默认携带浏览器cookie:

可以此根据cookie进行默认登录:

第三方扫码后跳转直接登录:

window.open(onemapUrlConfig.authLink + '/oauth_client/weixin/login?next='+onemapUrlConfig.siteLink);

vue 跨域简记的更多相关文章

  1. [转]vue跨域解决方法

      vue跨域解决方法 vue项目中,前端与后台进行数据请求或者提交的时候,如果后台没有设置跨域,前端本地调试代码的时候就会报“No 'Access-Control-Allow-Origin' hea ...

  2. vue跨域问题解决(生产环境)

    vue跨域问题解决(使用webpack打包的) 配置代理:(config下index.js文件) module.exports = { dev: { env: require('./dev.env') ...

  3. vue跨域处理

    本人对于vue跨域处理流程不是很清楚,特此理顺一遍. 1.在config中进行配置,该文件不是都存在,需要自己建: proxyTable,这个参数主要是一个地址映射表,你可以通过设置将复杂的url简化 ...

  4. vue 跨域 springCloud @CrossOrigin注解

    vue 跨域  springCloud @CrossOrigin注解 一丶什么是跨域 跨域问题来源于浏览器的同源策略,浏览器为了提高网站的安全性,在发送ajax请求时,只有在当前页面地址与请求地址的协 ...

  5. vue 跨域问题

    前段时间做一个vue打包成安卓和IOS的App,遇到了跨域问题,直接拿了之前项目的配置,却不起作用. import org.springframework.context.annotation.Con ...

  6. .net core webapi+vue 跨域访问

    最近在做一个前后端分离的示例,以下代码完美解决跨域的问题 一.后端服务 1.首先我们建一个.net core webapi的项目 2.项目引用Microsoft.AspNetCore.Cors 包 3 ...

  7. vue跨域代理配置

    实际:http://a.com/b.php 代理:http://localhost/b.php 配置config/index.js proxyTable: { '/api': { target:'ht ...

  8. 解决vue跨域axios异步通信

    在项目中,常常需要从后端获取数据内容.特别是在前后端分离的时候,前端进行了工程化部署,跨域请求成了一个前端必备的技能点.好在解决方案很多. 在vue中,在开发中,当前使用较多的是axios进行跨域请求 ...

  9. vue跨域访问

    第一次创建vue项目,画完静态页面一切顺利,准备和后台进行联调,问题来了,无论怎么调试使用Axios,jQuary还是使用原生的Ajax请求都访问不通(前提条件,另外一个人的电脑当成服务器,进行访问) ...

随机推荐

  1. C程序的函数说明使用和特点说明第一节

    一.函数的特点: 全部都是全部函数构成 面向过程的:是函数式语言 函数的调用 是按需调用 封装包含 二.程序中函数的作用: 可以使用函数使程序变的简短 和 清晰 提高代码重用性 提高开发效率 有利于程 ...

  2. sudo与用户权限

    sudo,以root的身份另起新进程 注意:cd是shell内置的,不会另起新进程,故sudo cd会提示找不到命令 sudo使用当前用户密码,su使用切换用户的密码,默认切换为root sudo通常 ...

  3. kindle touch 5.1.2 update your kindle 灰色 解决办法

    要出差了,于是把抽屉里的老Kindle Touch拿出来想升个级,baidu说多看费电,果断卸了用原生. 但是原生里面升级选项“update your kindle”是灰色的,没法点,怎么办? 试了半 ...

  4. leetcode 838

    我发现我非常不擅长解决这种 ummm充满了各种逻辑判断的问题 orz! 因为总是漏少几种情况(很绝望orz) 这道题我是这么判断的 temp为更改后的字符串,dominoes为原字符串 对于原字符串, ...

  5. 数据结构实验之查找六:顺序查找(SDUT 3378)

    (不知道为啥开个数组就 TLE .QAQ) #include <stdio.h> #include <stdlib.h> #include <string.h> / ...

  6. 1、vueJs基础知识01

    vue是框架,vue.js是vue框架的核心js库 库:是一个封装好的特定的方法的集合,提供给开发者使用,库没有控制权,控制权在使用者手中.代表:jQuery.underscore.util 框架:框 ...

  7. DH密钥加解密

    一.概述 1.与对称加密算法的主要差别在于,加密和解密的密钥不相同,一个公开(公钥),一个保密(私钥).主要解决了对称加密算法密钥分配管理的问题,提高了算法安全性. 2.非对称加密算法的加密.解密的效 ...

  8. Python将多张图片进行合并拼接

    import PIL.Image as Image import os IMAGES_PATH = r'D:\pics22223\\' # 图片集地址 IMAGES_FORMAT = ['.jpg', ...

  9. 表观 | Enhancer | ChIP-seq | 转录因子 | 数据库专题

    需要长期更新! 参考:生信修炼手册 enhancer的基本概念: 长度几十到几千bp,作用是提高靶基因活性,属于顺式作用原件,DNA作用到DNA,转录因子就是反式,是结合到DNA的蛋白. 1981年, ...

  10. [Java/File]读取日文CSV文件不乱码

    try { StringBuilder sb=new StringBuilder(); sb.append("\nContent in File:'"+filePathname+& ...