配置 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 错误的主要内容,如果未能解决你的问题,请参考以下文章