我目前正在讨论有关禁止在给定资源上并发GET请求构成违反RFC 2616(尤其是GET方法所需的幂等性和安全属性,§9.1)的问题。
例如;如果我的服务器收到一个 GET / data /?dataId = 123456 同时两次,你会认为一个或两个请求都返回错误信息是违反安全性或幂等性的吗?
根据我的理解,RFC指定相同的请求在再次调用时应该产生相同的结果。 然而,我还没有看到关于并发请求可接受的行为的任何内容。
我的感觉是,禁止并发GET访问(在给定资源上,当然不是一般规则)并不构成违反RFC。 返回423响应代码,或500(虽然不是很优雅),甚至429或420(虽然意思略有不同)似乎是我可以接受的。
我想知道是否有有效的论据证明RFC否认了这一立场。
提前致谢/最诚挚的问候
答案 0 :(得分:0)
特别是,已经确定了GET和HEAD方法不应该具有采取检索以外的动作的重要性的惯例。
阻止资源可能有资格作为检索以外的操作。但是SHOULD NOT的措辞绝对允许你这样做!您可以将其改写为:不建议这样做,但它是有效的。如果用户甚至不知道他造成了这种副作用,那就更好了:
当然,无法确保服务器不会因执行GET请求而产生副作用; [..]这里的重要区别是用户没有请求副作用。
从未有副作用的序列根据定义是幂等的(前提是没有并发操作在同一组资源上执行)。
您的实施唯一的副作用是阻止并发请求。顺序请求没有副作用。 据我所知,引用的段落并不要求9.1.2对并发请求免费。所以你从我那里获得了9.1.2的有效。
顺便说一句。我会使用503 Service Unavailable和Retry-After标题回答。
答案 1 :(得分:0)
在操作上,您的服务器可以做任何有关保护其资源免受攻击的事情。
也就是说,禁止任何并发GET到资源会让很多客户感到惊讶,说得客气一点。