1

在大多数论坛软件上,每次有人阅读一个主题时,该主题的计数器都会增加一个功能。这允许用户查看做出了多少回复以及主题被阅读了多少次,例如用于决定他们是否想要参与主题。

例子:

                                           Replies    Views
hydro locked 3.2 M engine worth fixing?    81         2037
Japan Gets BMW M5 Limited Edition Model    760        16392
...
...

如果我单击第一个主题,肯定会发生 GET 并且我可以阅读该主题。

现在,如果其他人紧随我后来到该站点,他将看到:

                                           Replies    Views
hydro locked 3.2 M engine worth fixing?    81         2038
Japan Gets BMW M5 Limited Edition Model    760        16392
...
...

因此,第一个主题的观看次数正确地从 2037 变为 2038。该计数器显然存储在服务器端。

所以我的问题很简单:如果服务器上发生修改,GET 怎么可能是幂等的?

请注意,在所有这些论坛软件上,浏览量是网站不可或缺的一部分:例如,回复很少但浏览量很大的主题通常比回复很少浏览量很少的主题更有趣。

我知道您可以将某些内容(例如分析)卸载到外部服务(例如 Google Analytics),这些服务可以为您计算页面浏览量、浏览器类型等。但是当用户获取资源的行为本身就是一个组成部分时怎么办您的网站?它可以是论坛或拍卖或其他...

有很多站点使用 GET 修改服务器上的状态。这是否意味着这些网站永远不可能是 RESTful 的?

4

1 回答 1

3

幂等性背后的原因GET是客户端不必担心多次获取资源的影响。您不希望对GET资源执行 a 并让它在您的论坛中创建主题,因为浏览器不会将请求视为具有任何副作用,并且会在每次点击 URL 时愉快地发布重复项。

对于POST请求,大多数浏览器的行为是不同的,它们会要求您确认您确实要向服务器重新提交请求,因为他们知道这可能会产生您关心的后果。

我有信心说这是可以产生这种副作用的情况之一,因为后果非常小,最终用户不会关心第二次意外请求资源。

我还建议您对您认为的“视图”要聪明,这样它就不仅仅计算GET在资源上执行的次数。这样一来,重复的请求就不会被视为视图,并且关于幂等性的观点变得更加不重要。

于 2013-07-16T12:27:37.123 回答