访问 API 中的自定义标头

Posted

技术标签:

【中文标题】访问 API 中的自定义标头【英文标题】:Accessing a custom header in the API 【发布时间】:2018-07-07 19:41:08 【问题描述】:

我正在向我使用通过 AngularJS 进行的 AJAX 调用控制的 API 发送自定义标头。

客户端 (AngularJS)

var authorization_token = 'qwerty';
var custom_token_value = 'abc123';

$http.get('http://api.mywebsite.com/endpoint', headers:'Auth':authorization_token,'Custom_Header':custom_token_value ).then(function(res) 

    console.log(res.data);

);

服务器 (PHP 5.6)

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET,POST,PUT,DELETE');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Auth, Custom_Header"); 

$headers = getallheaders();

print_r($headers);

回应

Array
(
    [Accept-Language] => en-US,en;q=0.9
    [Accept-Encoding] => gzip, deflate
    [Referer] => http://localhost:8080/
    [Auth] => qwerty
    [User-Agent] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/64.0.3282.119 Safari/537.36
    [Origin] => http://localhost:8080
    [Accept] => application/json, text/plain, */*
    [Connection] => close
    [Host] => api.mywebsite.com
)

为什么我看不到Custom_Header

【问题讨论】:

试过了吗? apache_request_headers() 【参考方案1】:

对于遇到此问题的任何人,经过反复试验,我发现Custom_Header 未显示的原因是因为它包含_(下划线)字符。下划线字符显然会从标题键中删除。

更多信息在这里:Why underscores are forbidden in HTTP header names

【讨论】:

以上是关于访问 API 中的自定义标头的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 spring mvc 和 $http 访问 CORS 环境中的自定义标头

如何处理 OPTIONS 请求中的自定义标头

Spring Boot REST API 版本控制的自定义标头方法

当请求 API 的自定义标头错误时,将 http 状态代码设置为 417

如何从 keycloak 中的自定义客户端获取角色?

缺少 django、nginx 和 gunicorn 的自定义标头