ajax和php的自定义标头

问题描述 投票:1回答:2

所以,我在从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'];
php ajax
2个回答
0
投票

你正在制作一个cross-origin请求(你不应该,因为你的代码显示了一个相对的URL,但可能在某处播放了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
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.