配置 Brackets Server 以避免 Access-Control-Allow-Origin 错误

Posted

技术标签:

【中文标题】配置 Brackets Server 以避免 Access-Control-Allow-Origin 错误【英文标题】:Configure Brackets Server to avoid Access-Control-Allow-Origin errors 【发布时间】:2013-10-08 05:47:41 【问题描述】:

在我的代码中,我使用 jQuery 从不同域的另一台服务器获取一些 JSON,并在浏览器中出现错误。

XMLHttpRequest cannot load http://url_containing_json.com. Origin http://localhost:53651  is not allowed by Access-Control-Allow-Origin

是否容易配置 Brackets 服务器以允许这样做?还是我需要设置自己的服务器才能做到这一点?

【问题讨论】:

【参考方案1】:

此限制来自网络浏览器,而不是服务器。它被称为same-origin security policy(又名同域策略)。

有问题的http://url_containing_json.com“JSON 服务器”是什么?它是您可以控制的服务器吗?如果是这样,那么您可以:

A) 将您的代码上传到“JSON 服务器”本身,以便您的网站由同一个域提供服务;或

B) 将您的代码上传到其他临时服务器,并在 JSON 服务器上使用 CORS 将临时服务器的域名列入白名单(JSON 服务器将提供 Access-Control-Allow-Origin HTTP 标头,如错误消息中所述)。

另一方面,如果“JSON 服务器”完全是第三方的,它是否真的想要像您这样的其他网站获取其 JSON?如果是这样,那么它应该已经支持 CORS(使用一揽子允许所有策略)或 JSONP(一种较旧的允许访问方式,尽管您的请求需要稍微不同地设置)。

如果 JSON 服务器不允许 允许跨域请求,您有最后的选择:使用您自己站点的服务器作为代理。您的页面不是直接 ping JSON 服务器,而是您的页面 ping 自己的服务器,然后代表页面 ping JSON 服务器。

所有这些方法都需要运行您自己的服务器,而不是使用内置的括号“localhost”服务器。您可以通过 File > Project Settings... 将括号指向您自己的服务器,但请注意,这将禁用某些功能,例如 Live html Development。 (但如果您能够使用上面的选项“B”,您可能会破解您的 hosts 文件,以通过更改其明显域来继续使用内置的 Brackets 服务器)。

希望有帮助!

【讨论】:

所以,在我发布之前研究这个问题时,似乎是通过服务器添加标题的问题,如下面的链接,因此我认为有一些方法可以做到这一点括号中的内部服务器,但我不知道如何访问它或它位于何处。对我来说,使用括号的全部意义在于实时预览功能,所以很高兴知道如何配置它的内部服务器***.com/questions/5008944/… 不幸的是,情况正好相反——您需要向您正在联系的服务器添加一个标头。本例中的“JSON 服务器”。如果您不控制该服务器并且它不想让您访问(即它不提供该标头或基于 JSONP 的 API),那么您的选择非常有限。即使在生产中也是如此。 您介意我问一下您要联系的服务器是什么吗?【参考方案2】:

遇到了完全相同的问题。我解决这个问题的方法是使用 jsonp ajax 请求类型,使用 $.ajax() 调用的 dataType 参数。 请参阅此通话中的JQuery documentation。

【讨论】:

以上是关于配置 Brackets Server 以避免 Access-Control-Allow-Origin 错误的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu 16.04 安装brackets

避免 SQL Server 中的 while 循环

防火墙高级应用 聚合链路 ipv6配置

如何设定RT-AC68U ASUSWRT的OpenVPN server

介绍一款小众的IDE

分享Brackets安装emmet插件出错解决办法