ajax和php的自定义标头

时间:2018-04-12 10:57:56

标签: php ajax

因此,我在从ajax调用中检索自定义标头时遇到问题。

这是我的ajax电话:

$.ajax({
    url: 'api.php',
    type: 'get',
    processData: false,
    beforeSend: function(xhr) {
        xhr.setRequestHeader('HASH', '5c268592cd4db9c7f6b813bb689005c6');
    },
    success: function(data) {
        console.log(data);
    },
    error: function(xhr, status, error) {
        console.log(xhr);
    }
});

在我的api.php中,我有这个:

<?php
    $headers = getallheaders();
    print_r(json_encode($headers));

输出:

......
"Access-Control-Request-Headers":"content-type,hash",
....

返回null:

echo $headers['hash'];
// or this echo $headers['HASH'];

2 个答案:

答案 0 :(得分:0)

您正在发出cross-origin请求(不应该,因为您的代码显示了相对网址,但可能在某处播放了HTTP重定向)并添加自定义标题。

这意味着它不是一个简单的请求,但需要preflight OPTIONS请求。

您看到的输出是OPTIONS请求的标头,询问服务器发送带有自定义标头的请求的权限。

您需要授予该权限,然后浏览器将发出第二个请求(这是您期望的那个)。

header("Access-Control-Allow-Origin: http://example.com/");
header("Access-Control-Allow-Headers: HASH, Content-Type");
header("Access-Control-Allow-Methods: GET");

答案 1 :(得分:-1)

试试这个$ _SERVER [“HTTP_HASH”];