放宽 Javascript 小部件的同源规则(弃用 google 财务回填数据)

Relax Same Origin Rule for Javascript Widget (deprecated google finance backfill data)

背景:

我有一个由 javascript 驱动的小部件,它使用来自另一个来源的数据。我在本地 IDE 中使用外部(非来源)数据 成功地 测试了它:
https://www.google.com/finance/getprices?q=.NSEI&x=NSE&i=600&p=1d&f=d,o,h,l,c,v

当我将此小部件上传到我的 wordpress 网站时出现错误:

SEC7120: Origin http://www.my-wordpress-site.com not found in Access-Control-Allow-Origin header.

这反过来让我调用数据 return 是这样的:

SCRIPT5007: SCRIPT5007: Unable to get property 'split' of undefined or null reference

免责声明:

我知道 google 财务早就被弃用了,但我的理解是服务器被保留 运行。这意味着数据仍然存在。 Google 明确声明将数据用于消费违反了该数据的使用条款。我正在构建的不是 API,也不是任何与消耗相关的东西。它只是一个严格用作美学装饰的前端小部件。我只是想让它通过绘制一些财务数据来使网站看起来更酷。

尽管如此,我不确定 google 是否不允许我获取数据,因为它无法识别我的网站。也许我误解了使用条款,但我 认为 我没有,但谁知道呢。我希望它是一种小型协议类型的修复程序,我可以在其中添加几行,之后一切都会很愉快。或者,如果确实是相反,我无法控制 google 信任哪些域,我不认为联系 google 并说 "hey google, don't leave my website out in the cold" 会起作用。

问题:如何放宽同源规则?关于 c# 的堆栈溢出已经提出了一些类似的问题,但我仍然想知道如何为我的 wordpress javascript 小部件执行此操作。 javascript一个人可以吗?

我看到很多例子有:

header("Access-Control-Allow-Origin: http://mozilla.com");

我不知道那是什么语言。我猜 PHP 或 c#。我对那些语言一无所知。我只想设计我的小部件,而不必学习有关后端协议的十亿知识。不过我准备付出一些努力。

澄清

我以前用这种方式制作过小部件(将 iframe 指向位于我的 cpanel 服务器上的小部件 html,而 wordpress 在 wp-content/uploads/2018/03 中),并且完全没有遇到任何问题。这一次,我在 post 中遇到了上面提到的来源错误。唯一的区别是现在我正在使用来自 google 服务器的一些外部数据。也许是 google 无法识别我的网站?该小部件在我的 IDE 中完美离线运行。我不确定如何进行以及 word-press 是否可以为这些事情带来任何帮助来帮助像我这样的小部件设计师,或者这是否完全是另一回事。

在以下浏览器中确认的错误结果:

这个问题相当简单。浏览器强制执行 Same Origin Policy, which prevents sites from accessing data fetched from a foreign domain. CORS 是一种服务器可以用来指示浏览器允许外部域读取其数据的协议。

Public APIs 旨在用于浏览器上下文中,通常会使用 CORS 来实现这一点。无论出于何种原因,Google 似乎并未使用 CORS 来允许 public 访问此 API。特别是,他们的响应不包括适当的 Access-Control-Allow-Origin header(CORS 协议的一部分)以允许 Javascript 从您的站点读取数据。你真的无能为力。

标准的解决方法是代理数据。也就是说,您的代码不会直接使用 API,而是会在您的服务器上点击 URL,然后从 Google 和 return 获取请求的数据它。服务器将能够读取数据,因为同源策略(作为浏览器问题)将不适用。并且您的 Javascript 将能够读取结果,因为请求是针对同一域发出的。

如果有办法绕过浏览器中的同源策略,我不熟悉它们。