问题描述
我正在阅读HTTP请求文档,并且看到了:
我必须实现这些功能吗?具体来说,如果我跟踪客户上次何时请求某些信息,那将使我的GET请求更改服务器状态该怎么办?还是如果我使用PUT请求来附加数据而不是替换数据,从而使其不是幂等的?文档专门说不要做以上两件事:
使用GET的请求应仅检索数据。
方法还可以具有“幂等”的特性(除了 从错误或到期问题)N> 0相同的副作用 请求与单个请求相同。方法GET,HEAD, PUT和DELETE共享此属性
解决方法
广泛,是的。
例如,您应该使用POST
或PATCH
进行附加。
您的GET
可以维护客户端的状态(尽管这可能不可扩展),但是只要URL和标头相同,响应就必须相同。
基本上,客户将基于该方法进行假设。这不仅是客户,还包括您与客户之间的任何代理,例如CDN,浏览器代理等。
某些库可能会假设它们可以重试幂等操作,例如GET
和PUT
。如果您的服务器已处理了请求,但响应未按时到达客户端,则这一点很重要。
许多客户端(包括浏览器)假定可以从其本地缓存中返回GET
,因此它们甚至都不会与您的服务器通信。有缓存控制响应标头可以帮助您解决问题。
如果您需要维护客户端状态,则HTTP可能不是您要使用的正确协议,HTTP旨在实现可伸缩性,而维护客户端状态则是可伸缩性的障碍。