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

Flask无法获取JavaScript添加的自定义请求头chart_type

Flask无法获取自定义请求头chart_type的解决方案

我在GET请求中添加了自定义请求头chart_type,Chrome开发者控制台能看到该请求头已发送至服务器,但Flask应用通过request.headers却无法获取到它。当前request.headers的输出内容如下:

X-Forwarded-For: 127.0.0.1
Host: localhost
X-Nginx-Proxy: true
Connection: close
Pragma: no-cache
Cache-Control: no-cache
Sec-Ch-Ua: "Not?A_Brand";v="8", "Chromium";v="108", "Google Chrome";v="108"
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
Sec-Ch-Ua-Platform: "macOS"
Accept: */*
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://localhost:8080/stock-market-pattern-modelling/quote?symbol=AAPL
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

问题原因及解决办法

1. Nginx反向代理过滤了自定义请求头

从输出里的X-Nginx-Proxy: true能看出请求经过了Nginx转发。Nginx默认会过滤两类请求头:

  • 带下划线的请求头(underscores_in_headers默认关闭)
  • 未显式配置传递的非标准自定义请求头

解决方式:
在Nginx的server或location配置块中添加以下内容:

underscores_in_headers on;  # 开启允许下划线请求头
proxy_set_header chart_type $http_chart_type;  # 显式将自定义头传递给后端Flask

修改后重启Nginx生效。

2. Flask/Werkzeug的请求头转换规则

Flask底层的Werkzeug会自动将请求头名称转为小写,并用下划线替换连字符。如果请求头没被Nginx过滤,你可以尝试两种方式获取:

# 方式一:直接按转换后的小写名称获取
chart_type = request.headers.get('chart_type')
# 方式二:如果发送的是连字符格式(比如Chart-Type),用这个
chart_type = request.headers.get('chart-type')

也可以遍历所有请求头确认是否存在:

for key, value in request.headers.items():
    print(f"{key}: {value}")

3. 直接验证Flask服务

绕过Nginx,直接请求Flask的服务端口(比如默认的5000),测试是否能拿到chart_type头。如果能拿到,就坐实了是Nginx的配置问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:40:29