使用 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,因为这些有更好的机会在从客户端到服务器的传输中存活下来。
我正在开发 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,因为这些有更好的机会在从客户端到服务器的传输中存活下来。