错误使用HTTP方法

问题描述

我正在阅读HTTP请求文档,并且看到了:

每个[HTTP请求]实现了不同的语义,但是具有一些共同的功能 由一组人共享:例如请求方法可以很安全, 幂等或可缓存的。

我必须实现这些功能吗?具体来说,如果我跟踪客户上次何时请求某些信息,那将使我的GET请求更改服务器状态该怎么办?还是如果我使用PUT请求来附加数据而不是替换数据,从而使其不是幂等的?文档专门说不要做以上两件事:

使用GET的请求应仅检索数据。

方法还可以具有“幂等”的特性(除了 从错误或到期问题)N> 0相同的副作用 请求与单个请求相同。方法GET,HEAD, PUT和DELETE共享此属性

解决方法

广泛,是的。

例如,您应该使用POSTPATCH进行附加。

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

基本上,客户将基于该方法进行假设。这不仅是客户,还包括您与客户之间的任何代理,例如CDN,浏览器代理等。

某些库可能会假设它们可以重试幂等操作,例如GETPUT。如果您的服务器已处理了请求,但响应未按时到达客户端,则这一点很重要。

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

如果您需要维护客户端状态,则HTTP可能不是您要使用的正确协议,HTTP旨在实现可伸缩性,而维护客户端状态则是可伸缩性的障碍。