使用 ipv6 时到达 php 服务器时缺少传入 header 的一部分

Part of incoming header missing at arrival on the php server when using ipv6

我正在开发 PHP-based API 并使用自定义 header 进行身份验证。

它非常适合使用 ipv4 的客户端。但是不知何故,当客户端使用 ipv6.

时,自定义 header 的一部分在到达 php 服务器时丢失了

在 Chrome 中,我可以看到 header 包含发送到服务器时的值(通过使用网络选项卡)。但不知何故,它在到达服务器端时丢失了。但仅在使用 ipv6 时。

客户端(React.js + Axios):

axios.defaults.headers.common["CUSTOM_HEADER"] = "test"; 
axios.get(url);

为了在 php 中访问自定义 header 的值,我在我的 .htaccess 文件中使用了以下内容。

Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Max-Age "1000"
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, CUSTOM_HEADER"

RewriteRule .* - [E=HTTP_CUSTOM_HEADER:%{HTTP:CUSTOM_HEADER}]

在PHP中:

$test = $_SERVER["HTTP_CUSTOM_HEADER"]; // this is empty (but only for IPV6!)

在 php 中,我检查了整个 $_SERVER 变量(以查看它是否包含不同的内容),但是不知何故,当从 ipv6 调用时,该值完全丢失了。

Linux 服务器使用 Apache。

有人知道吗?

原来不是代码相关的

托管公司对 IPV6 使用了不同的负载平衡 servers/proxy。这些配置不同(ipv6 使用的负载平衡服务器剥离了自定义 headers)。

我学到了什么:避免自定义 headers 并尽可能多地使用官方 (IANA) http headers,因为这些有更好的机会在从客户端到服务器的传输中存活下来。