HTTP POST v / s HTTP GET

我想从前端(Angular)到后端进行数据库查询。 但是我需要发送很多参数。

据我所知,如果我们不做任何数据库更改,最好使用GET,因为它使用caching的条目。 如果需要在服务器/数据库上进行更改,则应使用POST。

但是如果我想发送很多参数(一些是序列化的对象)并且不做任何服务器端改变,那么在这种情况下使用POST请求是否可以,并且将所有参数embedded到POST正文中而不是发送巨大的URL编码的GET请求?

要首先清除这个问题:只要源服务器返回正确的caching响应头文件, 可以caching对POST请求的响应。 但是,浏览器和代理服务器通常不会将caching应用于POST请求。

也就是说,使用适当的编码,可以在查询string的〜2 KB内存储大量的信息,所以GET应该是最好的select。

如果你确定你会超越GET请求的限制,并且你需要在保持可caching的情况下使用POST方法,那么可以引入一种“nonce”,例如使用search参数的散列:

  1. 客户端使用search参数进行/search
  2. 服务器将参数存储在某个地方,例如存储在数据库中。
  3. 服务器从参数生成一个随机数,例如通过散列search参数或者行ID。
  4. 服务器将客户端redirect到该随机数的结果页面: /search/123abc
  5. 客户端请求/search/123abcsearch结果页面。
  6. 服务器基于nonce执行search,并返回可caching的响应。

这将引入一个额外的HTTP往返,但启用caching跨浏览器和通过代理服务器。

我认为你应该在这个更易于pipe理和看起来干净的情况下使用post。 为了更好的发布,请按照以下链接:

  • 链接1
  • 链接2