使用PHP将数据发布到不同的域,AJAX不起作用

时间:2016-01-23 01:49:23

标签: javascript php jquery ajax cors

我想使用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

2 个答案:

答案 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?