因此,我在从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'];
答案 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”];