我搜索了整个网络,在其他stackoverflow线程中找到了各种答案,尝试了所有答案,但无法让我的答案发挥作用。场景:
- 在客户端使用angular并使用http获取请求
- 在Openshift主机上运行的MySQL数据库旁边的服务器端使用PHP
角度代码:
var app = angular.module("myapp", []).config(function ($httpProvider) {
//Enable cross domain calls
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
});
app.controller("Circle", function ($scope, $http)
{
$scope.Bijstand = function (Verdiep) {
$http.get(url + "?function=getMetingen&Verdieping="+Verdiep)
.success(function (Result) {
console.log(Result);
});
}
});
PHP代码:
header("Access-Control-Allow-Origin: 'http://localhost:54700'")
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST");
header("Access-Control-Allow-Headers: X-Requested-With");
$servername = getenv('OPENSHIFT_MYSQL_DB_HOST').":".getenv('OPENSHIFT_MYSQL_DB_PORT');
$username = getenv('OPENSHIFT_MYSQL_DB_USERNAME');
$password = getenv('OPENSHIFT_MYSQL_DB_PASSWORD');
$dbname = getenv('OPENSHIFT_GEAR_NAME');
// Create connection
$con = $con = mysql_connect($servername, $username, $password);
// Check connection
if (!$con) {
die("Connection failed: " . mysql_error());
}
mysql_select_db($dbname,$con);
当从angular向php发出http-get请求时,我得到以下错误:
SEC7120 : Origin of 'http://localhost:54700' not found in Access -Control- Allow -Origin header . SCRIPT7002 : XMLHttpRequest : Network error 0x80700013 , Can not complete this operation by mistake 80700013 . SERVER ERROR - The server has detected an unexpected error that the request can not be completed.( XHR ) : GET - " getString "
我见过各种各样的方法来解决这个问题,我试过所有的方法,但都不起作用。请帮我调试这个。仅供参考:我不关心数据库或数据的安全性。存储的信息一点也不敏感,所以不要在"隐私"问题上退缩。感谢
这可能不是一个完整的答案,但HTTP响应只能有一个Access-Control-Allow-Origin
值。
例如,另一个SO问题讨论了使用多个ACAO
字段时的问题。
在单个字段中列出值也不起作用。W3C规范说:
它不是允许一个以空格分隔的原点列表,而是一个单独的原点或字符串"null"。
使用"*"(星号)作为值并不总是有效的,有关更多详细信息,请参阅W3C规范。
因此,要返回的唯一安全值是http://localhost:54700"。
最后,Chrome在本地主机上支持CORS时遇到了问题,请参阅此问题以了解更多详细信息。几个月前,当我上次学习CORS时,这个问题仍然存在。