You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP Curl请求HTTPS返回400,HTTP转HTTPS正常的问题排查

问题概述

我们的模板系统通过PHP cURL拉取CMS页面的头尾导航,实现各市场Web应用与主站融合。目前50余个市场模板均运行正常,但葡萄牙市场模板存在以下异常:

  • 直接发起HTTPS请求时,返回400 Bad Request错误
  • 改用HTTP请求时,先收到301重定向响应,跟随重定向后再次请求原HTTPS URL可返回200正常响应
  • 浏览器及CLI环境下的cURL请求该模板的HTTP/HTTPS地址均正常,仅PHP脚本中的cURL请求出现上述问题

进一步抓包分析发现:

  • 触发400错误的HTTPS请求中,GET路径与HTTP/2之间存在3个空格
  • 初始HTTP请求中,GET路径与HTTP/1.1之间同样存在3个空格
  • 重定向后的HTTPS请求中,GET路径与HTTP/2之间仅为1个空格
    该模板的请求URL与其他正常市场实例完全一致,推测问题源于葡萄牙市场实例的服务器配置。
服务器端排查方向
  • HTTP请求格式校验规则:检查服务器(或反向代理/负载均衡)是否对请求行的空格数量有严格校验。部分服务器配置会拒绝请求行中存在多余空格的请求,而PHP cURL的默认请求构造可能在特定环境下生成了多空格的请求行,浏览器/CLI cURL则不会。
  • HTTP/2协议处理逻辑:排查服务器对HTTP/2请求的解析逻辑,是否存在对请求行空格数量的特殊处理。直接HTTPS请求使用HTTP/2时触发400,重定向后的HTTPS请求同样用HTTP/2却正常,需确认两次请求的协议细节差异(如是否启用了特定HTTP/2扩展、请求头构造差异)。
  • 重定向后的请求改写规则:检查服务器在301重定向过程中,是否对请求行进行了自动修正(如去除多余空格),导致重定向后的请求符合服务器校验规则。
  • PHP cURL与服务器的协议协商差异:对比PHP cURL与CLI cURL的请求参数(如CURLOPT_HTTP_VERSION、CURLOPT_HTTPHEADER等),检查服务器是否对PHP cURL的特定协议协商方式(如ALPN协商结果)有不同的处理逻辑。
  • 反向代理/CDN配置:若葡萄牙市场实例使用了反向代理或CDN,需排查代理层是否存在请求改写或校验规则,导致多空格的请求被拦截。

内容的提问来源于stack exchange,提问作者Torben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 13:11:36