当我在公司防火墙后面试图调用我用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服务。
答案 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服务调用,一切都很好。
我绝对不认为这是问题,因为不到一周前,这个防火墙指令并不存在。