【发布时间】:2011-04-01 01:56:27
【问题描述】:
这个问题与一般何时使用 GET 或 POST 无关;它是关于处理退出 Web 应用程序的推荐使用哪个。我已经找到了大量关于一般意义上的 GET 和 POST 之间差异的信息,但我没有找到针对这种特定场景的明确答案。
作为一个实用主义者,我倾向于使用 GET,因为实现它比 POST 简单得多;只需删除一个简单的链接,您就完成了。我能想到的绝大多数网站似乎都是这种情况,至少在我的脑海中是这样。甚至 Stack Overflow 也使用 GET 处理注销。
让我犹豫的是(尽管是旧的)论点,即一些网络加速器/代理通过访问并检索他们在页面中找到的每个链接来预缓存页面,因此用户在点击它们时会得到更快的响应。我不确定这是否仍然适用,但如果是这种情况,那么理论上具有这些加速器之一的用户一旦登录就会被踢出应用程序,因为她的加速器会找到并检索注销链接,即使她从未点击过。
到目前为止,我所阅读的所有内容都表明 POST 应该用于“破坏性操作”,而不会改变应用程序内部状态的操作(例如查询等)应该使用 GET 处理。基于此,这里真正的问题是:
退出应用程序是否被视为破坏性操作/是否会改变应用程序的内部状态?
【问题讨论】:
-
好吧,假设您是第一次访问该站点,并且没有注销链接,那么您在登录时就会被注销。再次登录后就好了,因为注销 url 已经被缓存了。但是可以假设任何像样的加速器都能够过滤掉大多数注销 url。
-
HyperCas,加速器过滤出注销 URL 是我正在考虑的一个理论,也是我决定发布这个问题的原因之一。我有点不情愿只相信加速器逻辑,有一天有一个使用糟糕加速器的用户抱怨她无法登录。你知道他们是否遵循标准,或者是否存在这样的标准?
-
任何自动提交表单的加速器(例如)都是恶意软件 IMO...认为加速器会自动提交表单是完全不合逻辑的。想象一下你访问谷歌。它如何提交搜索表单?没有人可以解释恶意软件,因为它太不可预测并且不遵守规则。
-
@AlexW - 我想你误解了我的问题。我提出的加速器方案是在使用 GET 而不是 POST 时显示一个可能的问题,因此不会有要发布的表单,只有简单的链接,加速器不会出现问题。
-
我意识到我已经为时已晚,但亚历克斯,这不是丹尼尔要问的。他的意思是,如果用户单击注销链接并且加速器返回缓存的注销页面而不点击应用程序,那么用户将保持登录状态。与恶意软件无关,尽管 FYI 检查用户代理字符串不会修复无论如何。
标签: architecture rest post get