[英]Posting data to different domain using PHP, AJAX don't work
我想使用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
您正在检查Origin HTTP标头是否等于'http://domain1.com/api/'
。 但是, MDN CORS文档说:
源是指示从中发起请求的服务器的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;
附带说明:如果您使用“ HTTP_ORIGIN”标头来“保护”您的请求,则应重新考虑它。 任何人都可以欺骗此标头并任意设置该值。 您最好使用某种密钥/秘密来避免不必要的请求。 请参阅: CORS是执行跨域AJAX请求的安全方法吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.