使用带有请求体的GET请求与使用POST请求检索大型资源的区别

5
根据像这个的许多帖子,使用带有正文的GET请求并不常见。
另一方面,REST中的最佳实践之一是仅在想要对资源进行更改时使用POST,在只想检索资源时使用GET。
那么我的问题是,获取一个非常大的负载资源的首选方法是什么? 我应该优先考虑HTTP最佳实践并使用带有正文的POST,即使我实际上没有更改任何内容,还是坚持RESTFUL实践并使用带有正文的GET?

请参阅:https://www.baeldung.com/http-get-with-body - undefined
1个回答

6
在这个语境中,“HTTP最佳实践”和“RESTful最佳实践”是相同的:使用带有请求主体的GET方法令牌是不良实践。
只有在我们想要更改资源时才使用POST。这不是完全正确的 - 请参见可以使用POST(Fielding,2009)。简单概括一下,POST是具有最少约束的HTTP方法。我们始终可以使用它,但当请求的语义符合约束时,应该优先使用更具体的方法。对于获取资源的表示,我们更喜欢使用GET,因为它最好地将请求的语义传达给通用HTTP组件,以便它们可以正确解释请求的语义并执行有用的操作。但这取决于能够使用request line中的信息完全识别资源。如果您的标识符太长,则无法正常工作,您需要退回到使用POST,并将“标识符”复制到请求的正文中。

这样做“可行”,但是它的代价是通用组件不会知道GET约束仍然适用,因此无法执行任何智能操作(例如自动重试如果响应丢失、缓存结果等)。


在2020年底,HTTP工作组采纳了一个提案,创建一个名为“GET with a body”的新方法标记。因此,在某个时候,我们应该开始看到注册的标准、符合要求的实现等等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接