我想使用AJAX将数据从domain1.com
发布到domain2.com
,但我的请求失败了。
这是domain1.com
上的代码:
$.ajax({
type: 'POST',
url: 'https://domain2.com/payment/api/server',
crossDomain: true,
data: {
Name: $("#name").val().trim(),
Email: $("#email").val().trim()
},
dataType: 'json',
success: function(data) {
alert('Success');
},
error: function (data) {
alert('POST failed.');
}
});
这是domain2.com
上的服务器端代码:
switch ($_SERVER['HTTP_ORIGIN']) {
case 'http://domain1.com/api/': case 'http://domain1.com/api/':
header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');
break;
}
$name = $_POST['Name'];
echo $name; // Just to check if I receive the value from index.php
答案 0 :(得分:1)
您正在检查Origin HTTP标头是否等于'http://domain1.com/api/'
。但是,MDN CORS docs说:
origin是一个URI,表示发起请求的服务器。 不包含任何路径信息,但仅包含服务器名称。
您必须从字符串中删除路径,即它必须是'http://domain1.com'
。
更正了server.php
代码:
switch ($_SERVER['HTTP_ORIGIN']) {
case 'http://domain1.com':
header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');
break;
}
$name = $_POST['Name'];
echo $name;
答案 1 :(得分:-1)
作为旁注:如果您使用" HTTP_ORIGIN"标题为"安全"你的要求,你应该重新考虑它。任何人都可以欺骗这个标题并随意设置值。您最好使用某种密钥/密钥来避免不必要的请求。请参阅:Is CORS a secure way to do cross-domain AJAX requests?