wra*_*him 10 cors webpack vue.js webpack-dev-server vue-resource
我有一个使用webpack-simple选项生成的Vue应用程序.我正在尝试发出GET请求,https://api.forismatic.com/api/1.0/?method=getQuote&format=json&lang=en但我收到错误:
XMLHttpRequest无法加载
https://api.forismatic.com/api/1.0/?method=getQuote&format=json&lang=en.对预检请求的响应未通过访问控制检查:请求的资源上不存在"Access-Control-Allow-Origin"标头.http://127.0.0.1:8080因此,不允许访问" 来源" .
我正在使用vue-resource并添加了:
Vue.http.headers.common['Access-Control-Allow-Origin'] = '*'
Run Code Online (Sandbox Code Playgroud)
那没有效果.
我还在以下devServer选项中添加了这个webpack.config.js:
devServer: {
historyApiFallback: true,
noInfo: true,
headers: {
"Access-Control-Allow-Origin": "*"
}
}
Run Code Online (Sandbox Code Playgroud)
这也不能解决问题; 错误消息保持不变.
如何解决这个问题?
sid*_*ker 15
Access-Control-Allow-Origin是请求所必须发送的服务器的响应头.
但是https://api.forismatic.com/api/1.0/?method=getQuote&format=json&lang=en不发送Access-Control-Allow-Origin标题 - 所以你需要通过代理发出请求.通过将您的前端JavaScript代码更改为使用此URL来执行此操作:
https://cors-anywhere.herokuapp.com/https://api.forismatic.com/api/1.0/?method=getQuote&format=json&lang=en
Run Code Online (Sandbox Code Playgroud)
试试这个,你的前端代码将按预期工作.但请确保您首先删除此:
Vue.http.headers.common['Access-Control-Allow-Origin'] = '*'
Run Code Online (Sandbox Code Playgroud)
即添加Access-Control-Allow-Origin报头添加到请求,作为请求报头.但如上所述,Access-Control-Allow-Origin是一个响应头.因此,通过添加Access-Control-Allow-Origin请求,您所拥有的唯一效果是您触发浏览器发送CORS预检OPTIONS请求而不是发送您的GET.
顺便说一句,你也可以删除这个:
headers: {
"Access-Control-Allow-Origin": "*"
}
Run Code Online (Sandbox Code Playgroud)
似乎所做的只是将Access-Control-Allow-Origin响应头添加到您自己的服务器后端的响应中.但是你的前端代码所做的请求并没有进入你自己的服务器后端 - 相反它会发生https://api.forismatic.com/.
无论如何,https://cors-anywhere.herokuapp.com/https://api.forismatic.com/…URL将导致请求转到https://cors-anywhere.herokuapp.com,发送请求的开放/公共CORS代理https://api.forismatic.com/api/1.0/?method=getQuote….
当该代理获得响应时,它将接受它并向其添加Access-Control-Allow-Origin响应头,然后将其作为响应传递回您的请求前端代码.
Access-Control-Allow-Origin响应头的响应是浏览器看到的,因此浏览器显示的错误消息现在消失了,浏览器允许您的前端JavaScript代码访问响应.
或者使用https://github.com/Rob--W/cors-anywhere/中的代码来设置您自己的代理.
您需要代理的原因是,https://api.forismatic.com/api/1.0/?method=getQuote…本身不会发送Access-Control-Allow-Origin响应标头,因此您的浏览器将拒绝让您的前端JavaScript代码访问来自该服务器跨域的响应.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS有更多详细信息.
| 归档时间: |
|
| 查看次数: |
18629 次 |
| 最近记录: |