繁体   English   中英

使用PHP将数据发布到其他域,AJAX不起作用

[英]Posting data to different domain using PHP, AJAX don't work

我想使用AJAX将数据从domain1.comdomain2.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM