我已阅读RFC 2617,如果支持多种方案,则无法在那里或其他任何地方找到分隔符。例如,假设支持Basic和Digest。我知道它可能会这样:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic
WWW-Authenticate: Digest
但我也读到两者都可以列为一行,但是没有人展示过一个例子或描述要使用的分隔符。我已经看到警告说逗号可以在单个方案中使用:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest param1="foo", param2="bar"
我还读过如果在方案中使用逗号,则其他方案必须放在不同的行上。所以我想在上面的例子中,如果我们添加Basic,它会显示如下:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest param1="foo", param2="bar"
WWW-Authenticate: Basic
这很简单。但现在假设你只有一行
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Scheme stuff, morestuff, more stuff
那是什么?这是一个以逗号分隔的方案列表,还是一个方案,只有几个参数?
答案 0 :(得分:26)
就我所知,the spec就这个问题发了言。第1.2节规定:
注意:用户代理需要特别注意解析WWW- 如果头字段值包含
,则进行身份验证或代理验证 不止一个挑战,或者如果有多个WWW-Authenticate标题
提供字段,因为挑战的内容本身可以是 包含以逗号分隔的身份验证参数列表。
我认为我们可以将特别护理翻译成祝你好运。。
<强>务实强>
实际上,我怀疑多个方案意味着应该使用多个wwww-authenticate
标头。方案是可扩展的;例如,如果我想变得阴险,我可以想出一个叫做“草莓”或“不透明”的计划。鉴于此,如果没有某种“方案终止”分隔符,就没有一种解析单行的好方法。
W3C讨论
你不是第一个有这个问题的人。 W3C邮件列表上有was a discussion。海报说:
我没有质疑是否需要提供多项挑战 单一回应。我只是质疑允许的智慧 鉴于奇数,单个标题字段中存在多个挑战 它创造的分隔符的组合。
其他一些讨论当前问题的线索&amp;未来可能感兴趣的行动:
如果只是......
并不是说我有胃,但是人们可以挖掘出色素,火狐和火星。 webkit代码,以了解这些社区如何处理该问题。