幂等报告的HTTP GET与POST

时间:2016-03-23 21:18:34

标签: ajax forms http post get

我正在构建一个基于网络的报告工具,可以查询但不会更改大量数据。

为了验证报告查询,我使用表单进行输入验证。

我知道以下有关HTTP GET的信息:

  1. 它应该用于幂等请求
  2. 浏览器可以缓存重复的请求
  3. 以下情况如何?

    1. 报告的数据每分钟都会更改,不得缓存
    2. 查询字符串非常大且大于2000个字符的网址限制?
    3. 我知道我可以很容易地使用POST并“破坏规则”,但是否存在明确的情况,其中推荐使用POST进行幂等请求

      另外,我通过AJAX提交表单,框架是Python / Django,但我认为不应该改变任何内容。

1 个答案:

答案 0 :(得分:1)

我认为在这种情况下使用POST是可以接受的。引用HTTP 1.1 RFC

  

POST方法执行的操作可能不会导致      可以通过URI标识的资源。在这种情况下,要么200      (OK)或204(No Content)是适当的响应状态,      取决于响应是否包含实体      描述结果。

在您的情况下,"搜索结果"资源是在符合HTTP POST请求规范的服务器上创建的。您可以选择将结果资源作为响应返回,也可以作为单独的URI返回刚刚创建的资源,并且可以删除,因为在一分钟的时间后不再需要结果资源(即,当您说数据每次更改时)一分钟。

The data being reported changes every minute

每次发出请求时,都会根据您的上述语句创建新资源。

此外,您可以返回201状态和URL以检索搜索结果资源,但我不确定您是否需要此类行为,但我只是提供了旁注。

第一个问题的第二部分说明结果不得缓存。这是你在服务器上配置的东西,用于返回必要的HTTP头,以强制中间代理和客户端不缓存结果,例如If-Modified-SinceCache-control等。

由于URL字符限制,您必须使用POST请求而不是GET请求,因此您的第二个问题已经得到解答。