从公司防火墙后面调用RESTful服务时出现CORS错误

时间:2017-11-14 15:17:15

标签: javascript php cordova cors

当我在公司防火墙后面试图调用我用PHP ONLY 编写的RESTful Web服务时,我收到以下CORS错误。

  

拒绝加入“http://prx-9k-40-hadc/?cfru=aHR0cDovL2phY2tzb25uZy5wcm9qZWN0c2JpdC5vcmcvcGl6emFwbGFjZS9sb2dpbl9hZG1pbi5waHA/dXNlcmlkPWFkbWluJnBhc3N3b3JkPWFkbWlu”,因为它违反了以下内容安全政策指令:“connect-src'self'数据:gap:http://myurl.com https://ssl.gstatic.com'unsafe-eval' '自我'ws:“。

当我不在公司防火墙后面时(即我从家里登录而没有通过公司VPN连接),这不会发生。

我的内容安全政策如下:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: http://myurl.com https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">

这就是我调用Ajax的方式:

$.ajax({
    url: url,
    type: 'GET',
    data: JSONObject,
    dataType: 'json',
    contentType: "application/json; charset=utf-8",
    success: function (arr) {
        _getLoginResult(arr);
    },
    error: function () {
        validationMsg();
    }
});

我的PHP Web服务中的标题如下所示:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');
header("Content-Type: application/json; charset=UTF-8");

同样,以下是症状:

当我不在我的公司防火墙之后,并且没有通过其VPN登录我的公司时,这里的一切工作正常。

一旦我登录,就会发生CORS错误,并且我没有尝试在服务器中进行任何设置更改,或者设置对内容安全策略的更改会更改任何内容。

我看到它说“拒绝连接到http://prx-9k-40-hadc”。这绝对不是我的RESTful Web服务的URL。感觉就像我公司的代理服务器。

有没有人遇到过这个?我希望能够在公司防火墙后面运行我的Web服务。

1 个答案:

答案 0 :(得分:1)

我解决了。我的公司防火墙配置为剥离它认为危险的访问控制头。显然,如果它不能通过SSL访问,那就觉得这很危险。

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');
header("Content-Type: application/json; charset=UTF-8");

所以我所做的就是使用https://代替http://进行RESTful服务调用,一切都很好。

我绝对不认为这是问题,因为不到一周前,这个防火墙指令并不存在。