PHP在IIS环境下Webhook请求头大小写不一致问题求助
解决IIS+PHP环境下Webhook请求头大小写异常问题
问题根源
IIS的HTTP.sys组件会自动规范化请求头格式,将每个连字符分隔的单词处理为首字母大写、其余小写的形式,导致你发送的X-ZEvent-Signature被转换为X-Zevent-Signature,进而在PHP中引发验证差异。
可行解决方案
兼容大小写验证(推荐):在PHP中不严格匹配请求头的大小写,统一转换为相同格式后再校验。示例代码:
$targetHeader = strtolower('X-ZEvent-Signature'); $signature = null; // 遍历所有请求头,忽略大小写匹配 foreach (getallheaders() as $headerName => $headerValue) { if (strtolower($headerName) === $targetHeader) { $signature = $headerValue; break; } } // 后续使用$signature进行签名验证逻辑禁用IIS请求头规范化:修改站点的
web.config配置,关闭HTTP.sys的请求头自动规范化功能。注意此设置会影响整个站点,需测试兼容性:<configuration> <system.webServer> <serverRuntime requestHeaderValidationMode="Legacy" /> </system.webServer> </configuration>统一发送端请求头格式:直接将发送的请求头改为
X-Zevent-Signature,和IIS规范化后的格式保持一致,从源头避免差异。
内容的提问来源于stack exchange,提问作者nguyenhuy289
相关产品推荐
相关产品推荐

