Flask HTTP 标头接口对于获取和设置是否不区分大小写?

gae*_*fan 8 http-headers flask

在我的 Flask 应用程序中,我设置和获取标头值如下:

  • response.headers["X-Frame-Options"] = "DENY"
  • request.headers.get('X-Forwarded-For', '')

我收到一封来自 Google Cloud 的电子邮件,说它很快将只使用小写标题名称:

9 月 30 日之后,HTTP(S) 负载均衡器会将请求和响应方向中的 HTTP/1.1 标头名称转换为小写

我想弄清楚是否需要在我的所有代码中小写标题名称,或者 Flask 是否会神奇地为我解决这个问题。

gae*_*fan 17

在这里没有得到任何答案,我决定深入研究 Flask 代码!看起来标题是在 werkzeug 中处理的,特别是在datastructures.py.

获取标题时,“标题”类确实不区分大小写:

def __getitem__(self, key, _get_mode=False):
    ...
    ikey = key.lower()
    for k, v in self._list:
        if k.lower() == ikey:
            return v
    ...
Run Code Online (Sandbox Code Playgroud)

似乎Headers该类在设置标题时不区分大小写,并且它使用您提供的确切键设置标题。我想这是可以的,因为这些标头接收端的任何代码都应遵循标准并将标头名称视为不区分大小写。