微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

自定义标题正在被删除

如何解决自定义标题正在被删除

我正在将自定义 X-Authorization 标头传递给我的 API。

在我的 API 中,我允许这样的标头:

header('Access-Control-Allow-Headers: Content-Type,Authorization,X-Requested-With,X-Authorization');

我正在使用 print_r(apache_request_headers())

检查标题

响应中对 X-Authorization 的唯一引用是:

[access-control-request-headers] => x-authorization

我正在使用 CGI,我相信它会去除常规的 Authorization 标头,这就是我尝试自定义标头的原因。

解决方法

可以看到$_SERVER超级全局下的请求头,把key转换成大写,前缀HTTP_&替换-to_

例如: X-foo-bar: baz

将在:

$_SERVER['HTTP_X_FOO_BAR']

以下请求:

curl -i 0:9000/test.php -H 'X-foo-bar: baz'

将返回:

HTTP/1.1 200 OK
Host: 0:9000
Date: Wed,27 Jan 2021 21:33:33 GMT
Connection: close
X-Powered-By: PHP/7.3.24
Content-type: text/html; charset=UTF-8

baz

PHP (test.php):

<?php
echo ($_SERVER['HTTP_X_FOO_BAR']);
,

以下在 Google Chrome 上对我有用: HTML 文件数据:

<!DOCTYPE html>
<html>
<head><title>test</title>
<script>
  const test = () => {
  fetch('/3.php',{
    method: 'POST',redirect: 'follow',headers: new Headers({
      'Content-Type': 'application/json','Foo': 'bar','X-My-Custom-Header': 'foo-bar-baz','X-Authorization': 'Basic dGVzdDp0ZXN0VG9rZW4='
    }),body: 'test123'
    })
    .then(response => response.json())
    .then(data => {
      console.log(data);
      document.querySelector('#response').innerHTML = data['HTTP_X_AUTHORIZATION'];
    });
  };
</script>
</head>
<body>
<button onclick="test();">Test</button>
<pre id="response"></pre>
</body></html>

3.php的内容:

<?php
header('Conent-Type: application/json');
echo json_encode($_SERVER);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。