本地调试网站调用其他网站提供的 API 提示 No 'Access-Control-Allow-Origin' header is present on the requested resource 要如何解决呢?

2017-06-07 16:30:46 +08:00
 nmgwddj

我自己做了一个本地的调试网站,所有目前还是在本地开发状态,我到聚合数据找到了一些股票相关的 API,我通过 fetch 或 d3-request 中的 json 方法来获取数据,浏览器都会返回如下错误:

XMLHttpRequest cannot load http://web.juhe.cn:8080/finance/stock/hs?gid=sh603496&&key=7e519487c11e168579190973e3772db0. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://stock.mycode.net.cn:8080' is therefore not allowed access.

我请求的代码如下:

const appkey = '7e519487c11e168579190973e3772db0';
const gid = 'sh603496';
const url = `http://web.juhe.cn:8080/finance/stock/hs?gid=${gid}&&key=${appkey}`;

json(url, (err, data) => {
console.log(err, data);
});

因为服务器不是我的,我是调用的别人提供的 API,所以修改服务器配置的方法就不行了。

我也找到了一个 Chrome 拓展 Allow-Control-Allow-Origin: * 可以解决该问题,但是我不想让其他代码开发者也依赖拓展。

所以请教大家,是否有方法可以不借助拓展、不修改服务器参数的情况下,实现数据的获取?

13025 次点击
所在节点    React
9 条回复
adspe
2017-06-07 16:34:54 +08:00
我之前遇到过。可以看我代码,已经解决
https://github.com/alivelee/su-weather
learnshare
2017-06-07 16:50:05 +08:00
自己写后端来请求数据,然后交给自己的前端页面
airyland
2017-06-07 18:11:44 +08:00
在 nginx 上代理该域名,加上 cors 就行了,几行代码。
jugelizi
2017-06-07 18:34:37 +08:00
如何对方不提供 jsonp 的话
1、自己写后端代码请求对方接口
2、用 nignx 的反代 proxy_pass
royzxq
2017-06-07 18:55:07 +08:00
使用 webpack 的话使用 http-proxy-middleware ,
http://www.jianshu.com/p/95b2caf7e0da

https://github.com/chimurai/http-proxy-middleware

或者使用 nginx
qqfs
2017-06-07 19:26:42 +08:00
--disable-web-security
GoBeyond
2017-06-07 20:11:23 +08:00
经典的跨站问题
解决方法
1. 你自己搞数据源本地写一个 api,或者在服务器反代他们的 api,然后在 header 插域控头
2. 联系 api 提供者给你写域控,或者给你一个 jsonp
nmgwddj
2017-06-07 20:45:38 +08:00
感谢各位回复,我参考 1 楼代码测试一下。
nmgwddj
2017-06-07 21:11:13 +08:00
我找到了一个很方便的方案,不用代理服务器,不用其他 webserver,不用修改服务器头等信息。

http://www.jianshu.com/p/19a6aefca350

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

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

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

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

© 2021 V2EX