是否可以在 HTTP 请求中使授权 header 可选?

Is it possible to make the authorization header optional on an HTTP request?

所以我正在创建一个论坛网站(比如 reddit)。在一个线程上,我想有两种不同的方式从后端请求线程的评论。

加上用户未登录时的请求
我只想 return 评论:

加上用户登录时的请求
我想 return:


端点将是这样的:

GET /thread/{threadID}/comments?startIndex={start index}&count={number of comments to return}

对于已登录的用户,我将在 header 中发送授权令牌。
对于未登录的用户,我不会在header中发送授权令牌。

是否可以像这样将授权 header 发送到 HTTP 请求是可选的?
或者我应该做两个单独的端点吗?

Is it possible to make sending the authorization header optional to an HTTP request like this? Or should I just make two separate endpoints?

是的,您可以根据请求中是否存在授权字段来改变资源的表示(内容)。

这是个好主意吗?这是一个更难的问题。

您已经知道两个独立的资源是如何工作的;那里不会有任何重大惊喜。

我们还有一个标准化机制来指示单个资源的多种表示形式可用。

但是授权字段,具体来说,是一种特殊情况,因为该字段在访问控制中扮演的角色;这对通用缓存的工作方式有影响,因此我们用于指示多个表示的 Vary 字段对授权字段等有豁免权....


如果您提交了这样的单个资源实现以进行代码审查,我也坚持要有决策记录,以便我们永久记录我们正在考虑的权衡(包括,例如,什么是应该在超级管理员爱丽丝需要验证表示的“匿名”变体时发生。