axios 跨域请求问题

2017-11-13 01:50:19 +08:00
 MrMike
框架用的是 Vue 2.0, 本地是 Mac 系统,远程是 Apache 环境。
使用 axios 进行本地请求远程服务器数据,但是报“ has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.”错误,经过测试,服务器是支持跨域请求的,我用 jQuery Ajax 请求,是可以获取到数据的。

组件中的 JS:
<script>
export default {
data () {
return {
lastestPost: '',
errors: []
}
},
created () {
this.$http.get('http://api.mydomain.com/post')
.then(response => {
this.posts = response.data
})
.catch(e => {
this.errors.push()
})
}
}
</script>

main.js

import Vue from 'vue'
import App from './App'
import router from './router'
import Element from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import axios from 'axios'

Vue.prototype.$http = axios
Vue.config.productionTip = false
Vue.use(Element)

/* eslint-disable no-new */
new Vue({
el: '#app',
router,
template: '<App/>',
components: { App }
})
13327 次点击
所在节点    Vue.js
19 条回复
zhoufenfens
2017-11-13 02:12:48 +08:00
你看请求里面加了这个头了吗'Access-Control-Allow-Origin'
MrMike
2017-11-13 02:50:45 +08:00
@zhoufenfens 在 vue 的请求里还要加这个参数?
lianyue
2017-11-13 02:51:59 +08:00
自己搜 cors 跨域
orancho
2017-11-13 03:11:37 +08:00
明明是服务器没配置好……
zhoufenfens
2017-11-13 03:11:38 +08:00
@MrMike 这个是服务器在 respnse header 里面加的,告诉浏览器当前哪个域给他发请求是合法的。不知道你说的服务器是支持跨域的结论是哪里得出来的
MrMike
2017-11-13 03:34:33 +08:00
@zhoufenfens 刚才仔细检查了下,直接访问 http://api.mydomain.com/post,返回的 header 里面是有'Access-Control-Allow-Origin'的参数的:
Access-Control-Allow-Origin:*
Cache-Control:no-cache, private
Connection:Keep-Alive
Content-Length:7
Content-Type:application/json

我在另外一个项目里用 jQuery ajax 请求,也是可以获取到数据,但是在 vue 里面还是报错,不会是因为 vue 项目是本地运行环境的原因吧。
MrMike
2017-11-13 03:35:42 +08:00
@zhoufenfens 在 vue 里面,请求远程服务器的 response header 里面没有 Access-Control-Allow-Origin 这样的参数的。
binux
2017-11-13 03:37:03 +08:00
@MrMike 本地运行你说的是 file:// ?那不行
MrMike
2017-11-13 03:39:38 +08:00
@binux 本地用的是 npm run dev 出来的页面请求的,这个应该不影响的吧。
MrMike
2017-11-13 03:40:20 +08:00
@binux http://localhost:8080/#/
binux
2017-11-13 03:41:41 +08:00
@MrMike #10 那你到 network 看那个请求不就一清二楚了吗
MrMike
2017-11-13 03:46:55 +08:00
@binux network 里获取不到服务器的数据,console 一直报错。
crystom
2017-11-13 04:08:36 +08:00
MaxBear
2017-11-13 08:05:19 +08:00
用 node 设置代理就好啦。
具体请看 https://www.bear777.com/blog/vue-vue-axios-vue-resource-vue
wkan
2017-11-13 09:18:26 +08:00
axios 在发跨域请求的时候会先发一个 options 请求,服务器没有处理好这个 options 请求吧
riggzh
2017-11-13 09:28:30 +08:00
浏览器跨域,加头
CodingWell
2017-11-13 09:31:08 +08:00
MrMike
2017-11-13 15:06:09 +08:00
@MaxBear 谢谢,获取到了。
MaxBear
2017-11-13 15:27:20 +08:00
@MrMike #18 不谢不谢~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/405821

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX