Top*_*era 26 language-agnostic http http-status-codes
我读到当用户使用时必须使用"401 Unauthorized"代码:
根据RFC,在两种情况下服务器都必须返回401代码.但我需要在我的ajax请求中区分.
任何人都有提示解决这个问题?
注意:我不想使用403 Forbidden代码,因为在403中"Authorization will not help",根据RFC.
tyl*_*erl 42
除非您打算使用HTTP身份验证,否则正确的响应为403("禁止").
响应代码401触发浏览器显示密码对话框,然后使用WWW-Authenticate带有用户提供的密码数据的标头重新提交相同的请求.这可能不是你想要的行为.
不要过于担心RFC中的解释 - 您真正需要注意的是各种响应代码的浏览器和搜索引擎副作用.
至于"Authorization will not help"位,在这种情况下是正确的,因为使用HTTP授权(具体是指WWW-Authenticate标题),实际上是没有用的.
403响应告诉用户没有权限,使该请求的浏览器,浏览器应该不会试图收集验证数据,并重新提交请求.这正是你所追求的回应.
我相信403是正确的.我们可能必须调整规范中的语言以使其清楚.
除了状态代码之外,您还应该传递自定义标头以满足应用程序特定需求。
我相信当前的做法是在自定义标题前加上X-
来自评论中发布的RFC 3864 (日期为 2004 年 9 月):
在某些情况下(尤其是 HTTP [24]),标头语法和用法会针对特定应用程序重新定义。[...] 在某些情况下,相同的字段名称可能会被不同地指定(由不同的文档)以用于不同的应用程序协议。[...]我们需要适应特定于应用程序的领域,同时希望认识并促进(在适当的情况下)跨多个应用程序的其他领域的通用性。
在最近的 RFC(6648,日期为 2012 年 6 月)中,他们专门解决了X-标头问题。
弃用应用程序协议中新定义参数的“X-”约定,包括已建立协议的新参数。[...] 不建议反对私有、本地、初步、实验或特定于实现的参数的做法,仅反对在此类参数的名称中使用“X-”和类似结构。
需要注意的是,虽然X-有特别说明,但它们仍然隐含地允许自定义标头作为传输信息的方式。应用程序特定的前缀 ( MyApp-) 可能更适合避免与任何其他标头发生冲突。
另请参阅:几年前在 HTTP 响应中使用“X-”标头是否安全。