0

我目前正在讨论关于禁止给定资源上的并发 GET 请求是否构成违反 RFC 2616 的问题(尤其是 GET 方法所需的幂等性和安全性,§9.1)。

例如; 如果我的服务器同时收到 GET /data/?dataId=123456 两次,您是否认为一个或两个请求返回错误消息违反了安全性或幂等性?

根据我的理解,RFC 指定相同的请求在再次调用时应该产生相同的结果。然而,我还没有看到任何关于并发请求的行为是可以接受的。

我的感觉是不允许并发 GET 访问(在给定资源上,当然不是一般规则)并不构成违反 RFC。返回 423 响应代码或 500(虽然不是很优雅),甚至是 429 或 420(尽管含义略有不同)对我来说似乎是可以接受的。

但是,我想知道是否有有效的论据证明 RFC 否认这一立场。

在此先感谢/最好的问候

4

2 回答 2

0

在操作上,您的服务器可以在保护其资源免受攻击方面做任何事情。

也就是说,禁止对资源的任何并发 GET 会让许多客户感到惊讶,委婉地说。

于 2014-02-20T00:26:14.397 回答
0

9.1.1 安全方法

特别是,已经建立了约定,即 GET 和 HEAD 方法不应该具有采取除检索之外的操作的意义。

阻止资源可能符合检索以外的操作。但措辞不应该绝对允许你这样做!您可以将其改写为:不推荐,但有效。如果用户甚至不知道他正在引起这种副作用,那就更好了:

当然,不可能确保服务器不会因为执行 GET 请求而产生副作用;[..] 这里的重要区别是用户没有请求副作用。

9.1.2 幂等方法

根据定义,从不产生副作用的序列是幂等的(前提是没有在同一组资源上执行并发操作)。

您的实现的唯一副作用是阻止并发请求。顺序请求没有副作用。我理解引用的段落不需要 9.1.2 对并发请求没有副作用。所以你从我这里得到了一个有效的 9.1.2。

顺便提一句。我会用503 Service UnavailableRetry-After标头来回答。

于 2014-01-19T06:50:56.893 回答