【发布时间】:2012-01-19 04:40:21
【问题描述】:
我知道 HTTP get 和 post 方法之间的区别(如 this 问题中的详细说明)。
我的问题是为什么不总是使用 post 方法进行 AJAX 调用,这是安全的。有更快的获取请求吗?是否有理由更喜欢获取而不是发布?
对于没有 ajax 调用是有原因的 - 共享指向同一个 url 的链接,但对于 AJAX 这个参数并不好......
【问题讨论】:
我知道 HTTP get 和 post 方法之间的区别(如 this 问题中的详细说明)。
我的问题是为什么不总是使用 post 方法进行 AJAX 调用,这是安全的。有更快的获取请求吗?是否有理由更喜欢获取而不是发布?
对于没有 ajax 调用是有原因的 - 共享指向同一个 url 的链接,但对于 AJAX 这个参数并不好......
【问题讨论】:
GET 请求更小更快;并在客户端和任何可能正在运行的代理中利用缓存。
对于预计不会经常更改的数据,GET 请求通常非常明智,因为除非必要,否则它们更有可能不被重新发送。
但是,对于预计会更频繁更改的数据,POST 确实是更安全的选择,因为它总是会重新发送到服务器,确保始终遵守更改。
还存在语义问题。 POST 请求实际上应该只在意图修改服务器上的数据时使用。
【讨论】:
前几天我正在阅读雅虎加速网站速度的最佳实践,他们已经很好地解释了为什么我们应该更喜欢发布帖子,这里是帖子 sn-p 供您参考
使用 XMLHttpRequest,POST 在浏览器中实现为一个两步过程:首先发送标头,然后发送数据。所以最好使用 GET,它只需要发送一个 TCP 数据包(除非你有很多 cookie)。 IE 中的最大 URL 长度为 2K,因此如果您发送超过 2K 的数据,您可能无法使用 GET。
一个有趣的副作用是,没有实际发布任何数据的 POST 的行为类似于 GET。根据 HTTP 规范,GET 用于检索信息,因此当您仅请求数据而不是发送数据以存储在服务器端时(语义上)使用 GET 是有意义的。
详情请参考该页面
【讨论】:
我的问题是为什么不总是对 AJAX 调用使用 post 方法
因为在 RESTful 应用程序中,将 POST 动词用于不修改服务器状态的操作是没有意义的。在 RESTful 应用程序中,请求是如何发出的并不重要:它是普通的、AJAX 还是机器人。
此外,GET 请求通常更快,并且被浏览器缓存。
【讨论】:
GET 对服务器使用一个请求,而 POST 使用两个请求。
根据 Yahoo 的 YSlow 团队的说法,当传输的内容小于 IE 的 2K 限制时,您应该选择 GET。在这里阅读更多:http://developer.yahoo.com/performance/rules.html#ajax_get
【讨论】: