是否可以在 HTTP 消息中包含多个授权标头?具体来说,我想包括一种承载令牌类型(传递 OAuth 访问令牌)和一种基本类型(传递 base64 编码的用户名:密码)。
GET /presence/alice HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
Authorization: Basic YXNkZnNhZGZzYWRmOlZLdDVOMVhk
我认为没有理由这是不可能的,只是想与社区一起审查以确定。
**** 2021 年 2 月更新 *** 请阅读对此回复的评论。他们的总体结论似乎是某些 Web 服务器接受多种授权方案,但这违反了 RFC 7230/7235 ****
这应该是可能的,您只需在字段值之间添加逗号,例如:
GET /presence/alice HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM, Basic YXNkZnNhZGZzYWRmOlZLdDVOMVhk
这是定义在RFC7230,第 3.2.2 节,场序:
发送者不得在消息中生成具有相同字段名称的多个标头字段,除非该标头字段的整个字段值被定义为逗号分隔列表[即#(values)]或者标头字段是一个很好的-已知的异常(如下所述)。
接收者可以将具有相同字段名称的多个标头字段组合成一个“字段名称:字段值”对,而不更改消息的语义,方法是将每个后续字段值按顺序附加到组合字段值,并用逗号。因此,具有相同字段名称的标头字段的接收顺序对于组合字段值的解释非常重要;代理在转发消息时不得更改这些字段值的顺序。
我不知道是否所有网络服务器都接受这一点——在撰写本文时,我正在与一位同事争论它是否应该起作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)