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

如何在Tornado中获取请求的Authentication Header?

解决Tornado中获取Authorization Header的问题

你的问题主要出在两个地方:一是没有正确获取当前请求的头信息,二是请求头的拼写可能不符合标准规范,我来一步步帮你修正:

1. 错误根源:创建了空的HTTPHeaders实例

你当前代码里新建了一个空的tornado.httputil.HTTPHeaders()对象,这完全和当前请求的头信息无关。Tornado的RequestHandler已经内置了请求头的属性——self.request.headers,直接用它就能拿到当前请求的所有HTTP头。

2. 注意请求头的拼写规范

标准的JWT认证请求头是Authorization: Bearer {token},而你提到用的是Authentication,这是拼写错误,会导致服务端拿不到正确的头信息。建议统一改成标准的Authorization,如果暂时需要兼容旧请求,也可以在代码里同时检查两个字段。

修正后的完整代码(适配JWT场景)

class HeaderHandler(tornado.web.RequestHandler):
    def get(self):
        # 优先获取标准的Authorization头,兼容拼写错误的Authentication
        auth_header = self.request.headers.get("Authorization") or self.request.headers.get("Authentication")
        
        if auth_header:
            try:
                # 拆分认证类型和token,注意处理格式错误
                token_type, token = auth_header.split(" ", 1)
                if token_type.lower() == "bearer":
                    # 这里可以加入你的JWT验证逻辑,比如用PyJWT库解码
                    # import jwt
                    # payload = jwt.decode(token, "your_secret_key", algorithms=["HS256"])
                    response = {
                        'message': '成功获取到Bearer Token',
                        'extracted_token': token
                    }
                else:
                    response = {
                        'message': '仅支持Bearer类型的认证'
                    }
            except ValueError:
                response = {
                    'message': '认证头格式错误,请使用 "Bearer {token}" 的格式'
                }
        else:
            response = {
                'message': '请求中未包含Authorization头'
            }
        self.write(response)

关键说明

  • self.request.headers是Tornado提供的请求头字典,用get()方法可以安全获取指定字段(HTTP头本身不区分大小写,但Tornado会统一处理成首字母大写的格式,比如authorization会变成Authorization,直接用大写开头的字段名即可)。
  • 拆分Bearer和token时加入异常处理,避免因为头格式不正确导致服务报错。
  • 如果要正式实现JWT验证,需要引入PyJWT库,在拿到token后进行解码和签名验证。

内容的提问来源于stack exchange,提问作者Lëmön

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:18:47