【问题标题】:Using CORS but nothing helped me使用 CORS 但没有任何帮助
【发布时间】:2017-05-01 09:22:40
【问题描述】:

我真的研究了几个小时,但还没有找到任何解决方案。我想通过jQueryajax 从不同的服务器获取一些数据。我在我的 chrome 控制台中收到此错误消息:

XMLHttpRequest 无法加载 https://editeddomain.com//somedata.json。不 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:63342” 使用权。响应的 HTTP 状态代码为 401。

这是我的设置:

  • PHPStorm 2016.1
  • jQuery v3.2.1
  • 谷歌浏览器
  • Fedora 25

这是我已经尝试过的,但我仍然得到同样的错误:

  • <?php header('Access-Control-Allow-Origin: *'); ?>
  • 使用--disable-web-security 启动 Chrome
  • 已安装 Chrome 扩展程序Allow-Control-Allow-Origin: *
  • 安装了 Chrome 扩展程序JetBrains IDE Support 并添加了类似 JetBrains 推荐 http://*/*

所以这些都没有帮助我,我仍然看到错误消息。

PS:这个工具只适合我,所以它不会也永远不会安装在与我的 PHPStorm 环境不同的网络服务器上

【问题讨论】:

  • 如果您希望将其投入生产,您应该真正使用服务器上的标头而不是所有这些插件。服务器标头是问题所在。确保将脚本的那部分放在应用程序的顶部。这是一个非常棒的答案:stackoverflow.com/questions/8719276/cors-with-php-headers
  • php header 应该可以解决问题,也许你把它们放在错误的地方?你确定你的请求得到这个标题吗?是 GET 请求吗?您是否检查了 chrome 开发人员工具中的“响应”部分的内容?

标签: javascript php jquery ajax google-chrome


【解决方案1】:

对于 chrome,除了 --disable-web-security 之外还要添加一个参数:

--用户数据目录

这是 Google 在稍后阶段推出的。

此外,要使其正常工作,请确保关闭所有 Chrome 实例,然后打开其中包含参数的实例。它只适用于在那里打开的第一个选项卡。它将有一个黄色条,说明您正在使用不安全的标签。

【讨论】:

  • 谢谢,这对我有帮助!如果我决定将我的 webapp 公开,我当然会像每个人解释的那样设置一个可以处理 CORS 的 web 服务器。但是现在 quciksolution 像你说的那样帮助了我:)
【解决方案2】:

CORS 的问题在于每个浏览器都需要不同的解决方案。到目前为止,在他们统一 CORS 之前使用 jsonp 似乎更好。

【讨论】:

  • 不幸的是 API 使用的是 json 而不是 jsonp
  • 我会检查允许使用哪些方法,并可能设置它们以及凭据如何。也许您可以发布您的 Ajax 脚本。
【解决方案3】:

您需要将此标头添加到“json”文件中。所以在你的例子中:

https://editeddomain.com//somedata.json

<?php header('Access-Control-Allow-Origin: *'); ?>

到这个 api。

如果它真的只是一个普通文件,则需要在 apache 中添加标题,例如在 htaccess 中(在同一文件夹中):

Header add Access-Control-Allow-Origin "*"

【讨论】:

  • 我无法控制我得到的 json 文件,这是我正在使用的 API。
  • 是的,但是这个 api 必须设置这个标头,这就是它的工作原理。
猜你喜欢
  • 1970-01-01
  • 2015-12-21
  • 2015-09-13
  • 2015-10-09
  • 1970-01-01
  • 2021-04-12
  • 1970-01-01
  • 2012-06-04
  • 2019-08-31
相关资源
最近更新 更多