错误地使用 HTTP 方法

Using an HTTP method incorrectly

我正在阅读 HTTP 请求文档,我看到了这个:

Each [HTTP request] implements a different semantic, but some common features are shared by a group of them: e.g. a request method can be safe, idempotent, or cacheable.

我必须实现这些功能吗?具体来说,如果我跟踪我的客户最后一次请求某些信息的时间,这会使我的 GET 请求更改服务器状态怎么办?或者,如果我使用 PUT 请求来附加数据而不是替换数据,使其不是幂等的?文档特别说明不要做以上两件事:

Requests using GET should only retrieve data.

Methods can also have the property of "idempotence" in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request. The methods GET, HEAD, PUT and DELETE share this property

大体上是的。

例如,您应该使用 POSTPATCH 才能追加。

您的 GET 可以为客户端维护状态(尽管这可能不可扩展),但响应必须相同,只要 URL 和 headers 是一样。

基本上,客户会根据方法做出假设。不仅是客户,还有您和客户之间的任何代理,例如CDN、浏览器代理等..

一些库可能会假设它们可以重试像 GETPUT 这样的幂等操作。这在您的服务器已处理请求但响应没有及时到达客户端的情况下很重要。

许多客户端,包括浏览器,都假定 GET 可以从它们的本地缓存中返回,因此它们甚至不会与您的服务器通信。有缓存控制响应 headers 可以帮助解决这个问题。

如果您需要维护客户端状态,HTTP 可能不是适合您使用的协议,HTTP 的目标是可扩展,而维护客户端状态是可扩展性的障碍。