【问题标题】:CORS not working in ChromeCORS 在 Chrome 中不起作用
【发布时间】:2013-11-06 14:16:29
【问题描述】:

我正在尝试在我的 Web 应用程序上实现 CORS(跨域资源共享)。这是结构:

  • 站点 example.com:包含几个 JS 文件(jquery.js、myscript.js)
  • 站点 example2.com:从 example.com 加载两个脚本,然后从 myscript.js 调用一个函数,该函数向 example.com 发出 POST 请求

example2.com 代码类似于:

<script src="http://example.com/jquery.js" type="text/javascript"></script>
<script src="http://example.com/myscript.js" type="text/javascript"></script>
<script type="text/javascript">startFunction(1, 2)</script>

两个 JS 在站点 B 上都可以正常加载。但是,当调用该函数并执行 POST(标准 jQuery $.post)时,我收到以下错误:

XMLHttpRequest 无法加载 http://example.com/postrequest。起源 Access-Control-Allow-Origin 不允许http://example2.com

我去了 example.com 服务器并像这样更新了 .htaccess:

Header set Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control"
Header add Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"

我检查了是否正在发送标头,并且确实正在发送它们。使用火狐访问example2.com,JS文件加载完毕,POST请求成功。但是,如果我尝试对 Chrome 进行完全相同的操作,它仍然会失败。我已经处理了几个小时,但我仍然看不出这有什么问题。这是 Chrome 的错误还是什么?

不得不指出,我检查了类似的问题并应用了一些解决方案,但我没有成功。

更新:尝试了添加以下内容的建议解决方案:

$.ajaxSetup({
    beforeSend: function(xhr) {
        xhr.setRequestHeader('Content-Type', 'text/plain');
    }
});

确实设置了 Content-Type,但同样的错误不断发生,所以这并没有解决任何问题。

【问题讨论】:

  • 查看类似问题的答案:CORS not working on Chrome
  • 我已经检查了该链接(您可以注意到,因为 Allow-Headers 标题与链接的问题完全相同)。
  • 但是您的请求中的'Content-Type' 标头呢?
  • 浏览器在执行 POST 时发送以下内容类型:Content-Type:application/x-www-form-urlencoded; charset=UTF-8。它应该被允许,因为 .htaccess 文件中列出了“Content-Type”标头。
  • 为了完成,也尝试添加Access-Control-Allow-Credentials: true。我最近看到了一些例子,由于 cookie,Chrome 的行为与 Firefox 不同。

标签: javascript jquery apache http-headers cors


【解决方案1】:

您的服务器设置如何?

您是否在不同系统之间进行了一些负载平衡或任何其他类型的请求处理?你在使用 Apache、NGINX 等吗? (我想 Apache 由于 htaccess ?

因为在这种情况下,你必须注意一些事情。

是否安装了 mod_header?

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
    Header set Access-Control-Allow-Headers "*"
</IfModule>

在大多数情况下,不需要内容和方法类型。 除非您使用选项请求。

尝试同时使用 Allow-Headers 规则。

请检查规则 Access-Control-Allow-Origin "*" 是否仅在您的请求中出现一次。 (可能从应用程序或 apache 配置中的设置发送,例如 vhost?)

您能否发布请求标头,包括。响应头?

(请使用 Chrome 开发工具、网络选项卡,而不是使用 RAW(!) 标头)

【讨论】:

    猜你喜欢
    • 2013-10-06
    • 2023-03-04
    • 1970-01-01
    • 2015-07-16
    • 2018-02-15
    • 1970-01-01
    • 2017-04-18
    • 2018-06-29
    • 2017-02-10
    相关资源
    最近更新 更多