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

通过WSO2 APIM网关发起CORS请求无法获取Content-Length头

解决方案:让WSO2 APIM传递Content-Length响应头

针对你的场景——直接调用后端Apache HTTPD能拿到Content-Length,但经WSO2 APIM网关后丢失,即使配置了CORS暴露头也无效,可按以下步骤排查解决:

  • 禁用网关的分块传输编码
    WSO2 APIM默认会开启分块传输(Transfer-Encoding: chunked),这种模式下Content-Length头会被自动忽略。你可以:

    • 全局配置:在网关的deployment.toml中添加[apim.gateway]段配置:
      [apim.gateway]
      enable_chunking = false
      
    • 单API配置:如果不想全局修改,可在API Publisher界面进入目标API的「高级设置」,添加DISABLE_CHUNKING属性并设为true,或者修改API的impl文件添加该配置。
  • 检查调解策略是否移除了响应头
    排查是否有自定义调解逻辑删掉了Content-Length:

    • 登录API Publisher,打开目标API的「Manage」→「Mediation Policies」,检查入站/出站流里有没有类似<property name="Content-Length" action="remove"/>的配置,有就删掉。
    • 同时检查全局调解序列(比如_auth.xml、_token.xml),确保没有全局移除该头的逻辑。
  • 排查响应压缩导致的头丢失
    如果后端Apache HTTPD启用了gzip压缩,WSO2 APIM可能会重新处理响应,导致Content-Length丢失:

    • 暂时关闭后端的压缩功能,测试是否能正常获取Content-Length。
    • 或者在网关的deployment.toml中禁用响应压缩:
      [apim.gateway]
      enable_response_compression = false
      
  • 确认CORS配置生效
    虽然你已经添加了Content-Length到expose_headers,但要确保配置无拼写错误:

    • 检查deployment.toml的[apim.cors]段:
      [apim.cors]
      enable = true
      expose_headers = "Content-Length, Content-Type" # 按需添加其他头
      
    • 重启网关后,用浏览器开发者工具查看响应:先确认Access-Control-Expose-Headers包含Content-Length,再检查响应头里是否实际存在Content-Length(如果网关根本没传递这个头,暴露配置也没用)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:49:49