0

我已将所有内容添加到我的 Apache htaccess 中:

标头集 Access-Control-Allow-Headers: X-Requested-With
标头集访问控制允许方法:选项
标头添加访问控制允许方法:GET
标头添加访问控制允许方法:POST
标头添加 Access-Control-Allow-Headers: Content-Type
标头添加访问控制允许标头:深度
标头添加 Access-Control-Allow-Headers: User-Agent
标头添加 Access-Control-Allow-Headers: X-File-Size
标头添加 Access-Control-Allow-Headers: X-Requested-With
标头添加 Access-Control-Allow-Headers: If-Modified-Since
标头添加 Access-Control-Allow-Headers: X-File-Name
标头添加 Access-Control-Allow-Headers: Cache-Control
标头集 Access-Control-Allow-Origin:http://mysite.com
标头添加 Access-Control-Allow-Origin:https://mysite.com
标头集 Access-Control-Allow-Credentials: true

我将此添加到我的 jquery $.ajax 中:

xhr字段:{
    withCredentials: 真
}

绝对没有任何作用。

我正在做 $.ajax

类型:'POST',
数据类型:'json'

我想通过设置上面所有这些标题,我可以做 json 而不是 jsonp(请不要 jsonp。除了 jsonp 之外的任何东西。我无法成功触发。please.god.no)

我已经到了极限。我得到了很好的 ole

XMLHttpRequest 无法加载https://mysite.com/aDirectory/aSecureFile.php。Access-Control-Allow-Origin 不允许来源http://mysite.com 。

请帮忙。我要死在这里了。我保证我到处都看过,哦,我到处都看过。

提前谢谢了!

明晰

我的标题都遇到了。我可以在我的响应标题中看到它们,但我仍然收到上述错误。服务器阻塞了吗?浏览器?我有什么特别的事情要做才能做 https 吗?我必须在 Apache 上设置其他设置以允许 CORS 吗?我的 jQuery $.ajax 正确吗?除了数据、成功和错误(以及 URL 始终是 https)之外,这就是我对 jQuery $.ajax 所做的一切。

再次感谢!

新的

跨域 AJAX 预检失败 Origin 检查没有帮助(我不认为)。添加

标头集 Access-Control-Allow-Headers: ORIGINS
(调整集合和添加)。所有响应标头都来自管道。

较新

添加了这些

标头添加 Access-Control-Allow-Headers: Origin
标头添加 Access-Control-Allow-Headers: Accept
依然没有

请求标头

这些有帮助吗?

接受:应用程序/json,文本/javascript,/;q=0.01
内容类型:application/x-www-form-urlencoded;字符集=UTF-8
来源:http ://mysite.com
引用者: http: //mysite.com/ 
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11

PHP

header("访问控制允许来源:http://mysite.com");
header("Access-Control-Allow-Origin: https://mysite.com");

响应标题清晰

RESPONSE HEADERS 来自所有正常请求,而不是跨域 https ajax。

服务器

CentOS 5.8、Apache 2.2.2、PHP 5.3、cPanel、WHM

很好,如果 PHP 没有执行

所以,我匆忙中,直接复制了slashingweapon的cors.php,没有php标签。我使用上面的设置用 $.ajax 制作了一个测试页面。

它工作(因为在 ajax 触发时没有错误)完成了响应标头。一旦我将标签添加到 PHP 中,错误就发生了。我检查了它是否是目录问题,将它放在根目录和子目录中,只要 PHP 没有执行就可以了。

这对任何人都意味着什么?

是否有需要翻转的 PHP 设置?

感谢大家和我一起解决这个问题!

我们有心跳

看起来 htacess 中的多个参数使我的服务器崩溃。我将上面的所有选项都减少到了这个(这对我来说很好,但我很遗憾需要更多的傻瓜):

<IfModule mod_headers.c> <FilesMatch "\.(php)$"> Header set Access-Control-Allow-Origin: http://mysite.com Header add Access-Control-Allow-Methods: POST </FilesMatch> </IfModule>

我在 PHP 中放的只是

回声“这至少有效”:

这就是回应。一旦我弄清楚是什么导致我的 PHP 失败,我会发布它。

再次感谢大家!

Zend Guard 的问题?

Sooooooooo,对不起,伙计们。忘记添加我的站点正在运行 Zend Guard。有一种导致它的感觉。

4

2 回答 2

1

首先,您需要确保 mod_headers 已启用

a2enmod headers

然后,作为测试,您可以在 .htaccess 文件中将原点设置为通配符

Header set Access-Control-Allow-Origin *

我正在查看带有和不带有冒号 (:) 的文档,并且我现在没有可以测试的系统,因此您也可以使用它。

当然,启用标头后,您将需要退回 apache。

于 2012-11-10T04:33:17.583 回答
1

当客户端尝试执行 CORS 请求时,它首先发送“预检”请求以确保服务器支持 CORS。如果预检请求通过,则将发送真正的请求。

您的服务器需要向 CORS 请求发送正确的响应。我有一个展示如何做到这一点的CORS PHP gist。

于 2012-11-10T17:30:36.620 回答