2

我正在尝试在我的 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,但同样的错误不断发生,所以这并没有解决任何问题。

4

1 回答 1

0

你的服务器设置如何?

您是否在不同系统之间进行了一些负载平衡或任何其他类型的请求处理?你在使用 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-11-15T15:39:09.927 回答