在创建AJAX请求的上下文中,GET和POST有什么区别?

时间:2010-11-25 04:21:47

标签: http post get

我有一个发送GET:'getPendingList'的AJAX请求。此请求应返回一个JSON字符串,指示需要批准的列表待处理请求。关于我是否应该在这里使用GET或POST,我有点困惑。

来自this website

  • 可以缓存GET请求
  • GET请求可以保留在浏览器历史记录中
  • GET请求可以加入书签
  • GET请求可以分发&共享
  • GET请求可能被黑客攻击(问雅各布!)

所以我在想:我不希望缓存此GET的结果,因为挂起的列表可能会更改。另一方面,使用POST似乎也没有多大意义。

我应该如何考虑GET和POST?我被告知GET与'read'相同;它不会(或不应该)改变服务器端的任何内容。这是有道理的。没有意义的是缓存部分;如果其他人缓存了我的GET请求,那对我不起作用,因为我希望数据能够改变。

3 个答案:

答案 0 :(得分:1)

雅虎的best practices可能值得一读。他们建议主要使用GET来检索信息并使用POST来更新信息。在单独的项目中,他们还建议执行使AJAX请求在可行的地方进行缓存。看看,这是一个很好的阅读。

答案 1 :(得分:0)

简而言之, GET 请求应为idempodent POST 请求不是。

如果您正在改变状态,请使用 POST - 否则请使用 GET

在谈论使用GET / POST进行缓存时,不要忘记,这是浏览器缓存

没有什么可以阻止你缓存数据服务器端。

此外,一般来说 - JSON调用应该是 POST here's why

答案 2 :(得分:0)

因此,在一些IRC之后,看起来最好的方法是使用GET(在这个特定的实例中),但是为了防止缓存。有两种方法可以做到这一点:

1)在您的GET请求中附加一个随机字符串。

这看起来像是一种hacky方式,但听起来它可能是IE的唯一解决方案:Prevent browser caching of jQuery AJAX call result

2)在来自服务器的响应中,将标头设置为no-cache。

目前尚不清楚最终的行为是什么。有些人(参见前面的链接)声称IE不遵守no-cache指令。其他人似乎认为这有效:Internet Explorer 7 Ajax links only load once