繁体   English   中英

HTTP客户端是否应该解析HTTP标头以响应错误404 Not Found

[英]Should HTTP Client parse HTTP Headers in response with the error 404 Not Found

如果它收到HTTP响应并出现错误4xx,我将找不到任何RFC或HTTP客户端行为标准。 我知道401、407是解析HTTP标头时的示例,但是...

我有OPTIONS方法(HTTP1.1)的具体问题。 服务器响应401未经授权,因此客户端尝试进行身份验证,然后使用身份验证重新发送请求。 之后,响应中将显示错误404 Not Found,并且HTTP标头已填充为Set-Cookie HTTP标头。 客户端使用Apache Java HTTPClient / HTTPComponents,如果响应中有错误,它将忽略HTTP标头。

客户端是否应该接受此HTTP标头? 我认为不应该这样,但是我在RFC中找不到支持的引用。

RFC 2616并没有规定应忽略任何标头,通常 也不是针对404响应4xx响应

RFC 6265允许客户端忽略Set-Cookie标头,但未指定可能发生的情况。 给出一个示例,但不涉及您的情况:

用户代理可能希望阻止对“第三方”请求的响应设置cookie

在您的情况下,由于您的服务器似乎使用HTTP基本访问身份验证,因此它似乎与Set-Cookie标头无关。 在HTTP基本身份验证中, Authorization标头是由客户端随每个请求发送的,因此无需在cookie中保持状态。

从您的问题尚不清楚,您是否要与之通信的是特定的HTTP服务器,或者是否要实现一个通用的HTTP客户端,该客户端应该与放置在其上的任何服务器一起使用。 如果您遇到的特殊情况是您使用的HTTP服务器使用404响应发送状态,并且您需要遵守该状态才能与服务器通信,并且您无法控制该服务器,那么它就不会不管标准怎么说 遵守发送的状态,否则将无法与服务器通信。

另一方面,如果您要实现一个通用客户端,并且不管远程服务器是什么,则都需要它运行,那么最好的选择就是坚持使用RFC 1958

发送时要严格,接收时要宽容。 在发送到网络时,实现必须严格遵循规范,并容忍来自网络的错误输入。 如有疑问,除非规范要求,否则请静默丢弃错误的输入,而不会返回错误消息。

对我而言,这意味着您应该尊重收到的全部答复,而不论状态码如何,除非您有客观的理由使您无法这样做。 我认为没有理由忽略状态,即使它违反了标准(或者在这种情况下,您个人对标准的看法也是如此,因为它没有说明接受或忽略状态)。

更新: RFC 2617(HTTP身份验证)规定:

客户应该假定所有在请求URI路径字段中最后一个符号元素的深度或比其更深的路径都在当前质询的基本领域值指定的保护空间内。 客户端可以抢先发送相应的Authorization标头以及对该空间中资源的请求,而无需从服务器接收到其他质询。

如果服务器期望对一个URL进行HTTP身份验证,但不对位于其下方的URL接受HTTP身份验证,则要求服务器进行基于Cookie的单独身份验证,这是非常不一致的。 如果在服务器实现中应进行任何更改,则应统一所有资源的身份验证方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM