AJAX 中的 GET 与 POST?

Posted

技术标签:

【中文标题】AJAX 中的 GET 与 POST?【英文标题】:GET vs POST in AJAX? 【发布时间】:2010-12-24 18:48:49 【问题描述】:

为什么在 AJAX 中有 GET 和 POST 请求,因为它不会影响页面 URL?由于数据没有反映到页面 URL,因此通过 AJAX 中的 GET 传递敏感数据有什么区别?

【问题讨论】:

数据通过GET方式反映在页面URL中。看看 TCP/IP 监视器发生了什么,甚至只是 Firefox 的 Header Monitor 插件。 可能重复:***.com/questions/715335/get-vs-post-in-ajax 【参考方案1】:

您应该根据您对 Web 服务的要求使用正确的 HTTP 动词。


在处理 Collection URI 时,例如:http://example.com/resources/

GET:列出集合的成员,并附上其成员 URI,以便进一步导航。例如,列出所有待售汽车。

PUT:含义定义为“用另一个集合替换整个集合”。

POST:在集合中创建一个新条目,其中 ID 由集合自动分配。创建的 ID 通常包含在此操作返回的数据中。

DELETE:含义定义为“删除整个集合”。


在处理 Member URI 时,例如:http://example.com/resources/7HOU57Y

GET:检索以适当的 MIME 类型表示的集合的寻址成员的表示。

PUT:更新集合的寻址成员或使用指定的 ID 创建它。

POST:将被寻址的成员本身视为一个集合,并为其创建一个新的下属。

DELETE:删除集合的寻址成员。


来源:Wikipedia

【讨论】:

真的有人为 PUT 和 DELETE 烦恼吗? “真的有人为 PUT 和 DELETE 烦恼吗?” -- 听说过 Amazon S3 吗? 是的,在定义 RESTful Web 服务时,您绝对可以这样做。【参考方案2】:

好吧,对于 GET,您仍然有 url 长度限制。除此之外,服务器对 POST 和 GET 请求的不同处理是完全可以想象的;因此需要能够指定您正在执行的请求。

【讨论】:

另外,您可以在开发应用程序时同时使用这两种请求类型。对于他们中的大多数人来说,is_ajax 标志就足够了。最好有这样的选择而不是没有。 我接受了 dnl.vssll 的回答,因为 HTTP 或 AJAX 没有强加 GET url 长度限制,您可以检查这个答案以获取 ***.com/questions/812925/… 。它受到浏览器/服务器的限制以及为什么它的限制确实是一个讨论点..由于HTTP是基于文本的,浏览器发送整个HTTP请求..它包括查询字符串,所以如果对请求的长度没有限制(假设理想情况)限制查询字符串有什么意义? 我并不是在为长度限制辩护,我只是说它在那里,你必须考虑它,因为在做 Web 开发时,你真的可以'不能忽视浏览器。但是,嘿,你不需要激励你的接受; dnl 的回复也不错 =) 长度限制在实践中也是一个非常有效的点。我完全同意大卫关于“不能忽视浏览器”的观点。 这比接受的答案要好。我们是开发者,不是柏拉图式的哲学家;您可以随心所欲地谈论 GET 的理想形式(w3 标准),但这并不能改变这样一个事实,即当您实际将应用程序放到现实世界中时,您必须处理不完美的浏览器,而这些浏览器不会正确处理任意长度的 URI。【参考方案3】:

GETPOST 之间的另一个区别是浏览器中处理缓存的方式。 POST 响应永远不会被缓存。 GET 可能会也可能不会根据响应标头中指定的缓存规则进行缓存。

【讨论】:

【参考方案4】:

拥有它们的两个主要原因:

    GET 请求对大小有一些相当严格的限制; POST 通常能够包含更多信息。

    后端可能需要GETPOST,具体取决于其设计方式。我们需要灵活地执行GET(如果后端需要)或POST(如果这是它所期望的)。

【讨论】:

【参考方案5】:

这只是为了尊重 http 协议的规则。

Get - 调用必须是幂等的。这意味着如果您多次调用它,您将得到相同的结果。它不打算更改基础数据。您可以将其用于搜索框等。

Post - 调用不是幂等的。允许对基础数据进行更改,因此可以在 create 方法中使用。如果您多次调用它,您将创建多个条目。

【讨论】:

【参考方案6】:

您通常向 AJAX 脚本发送参数,它会根据这些参数返回数据。它的工作方式就像具有 method="get" 或 method="post" 的表单。使用 GET 方法时,参数在查询字符串中传递。使用 POST 方法时,参数在 post body 中发送。

一般来说,如果您的参数字符很少且不包含敏感信息,那么您可以通过 GET 方法发送它们。敏感数据(例如密码)或长文本(例如 8000 个字符长的个人简历)最好通过 POST 方法发送。

【讨论】:

AFAIK GET 和 POST 方法仅在请求格式上有所不同,所以我认为 POST 并不比 GET 更安全。 GET 被认为是不安全的,因为参数会反映到 url,但 AJAX 克服了这个问题。此外,所有现代浏览器都不限制我们可以通过 GET 请求发送的数据量.. .. 我从响应中看到的唯一可能的解释是 AJAX 被设计为与完善的 HTTP 协议一起存在.. 这是合乎逻辑的。 @Xinus:我上次听说,浏览器 服务器仍然对 URL 长度(例如,GET)施加了很大的限制,HTTP 规范 IIRC 也是如此。您可以为您的声明发布参考,而他们没有? 你是对的。但是有些人认为 POST 比 GET稍微更安全的原因是 GET 参数可能存储在不同的位置,包括服务器日志和浏览器历史作为 URL。 POST 没有这个问题。 @T.J.克劳德:我在 David Hedlund 的评论中澄清了 这是我能够理解的唯一答案,而我的脑海中没有一堆后续问题。感谢您的简单说明。【参考方案7】:

谢谢.. 我主要使用 Ajax 的 GET 方法,到目前为止我没有遇到任何问题,除了以下问题:

如果使用相同的 GET 值,Internet Explorer(与 Firefox 和 Google Chrome 不同)缓存 GET 调用。

因此,使用 Ajax GET 的某个时间间隔可以显示相同的结果,除非您更改 URL 并为每个 Ajax GET 使用不相关的随机数。

【讨论】:

【参考方案8】:

其他人已经涵盖了要点(上下文/幂等性和大小),但我将添加另一个:加密。如果您使用 SSL 并想加密您的输入参数,则需要使用 POST。

【讨论】:

这是不正确的。通过 SSL 传输的所有数据均已加密。 GET 与 POST 没有任何区别。 我同意 Joel L 的观点。整个通信都是加密的,所以使用什么方法的问题在哪里?【参考方案9】:

我们在Ajax中使用GET方法时,只发送字段值的内容,而不发送内容的格式。例如,在 GET 方法的情况下,文本区域中的内容只是添加到 URL 中(没有换行符)。在 POST 方法中情况并非如此。

【讨论】:

以上是关于AJAX 中的 GET 与 POST?的主要内容,如果未能解决你的问题,请参考以下文章

AJAX - Http 中 post 和 get 的区别

Chrome 中的 AJAX 发送选项而不是 GET/POST/PUT/DELETE?

$.ajax 中的contentType

原生Ajax与JSON实践二(Post请求)

Ajax学习——GET和POST请求(jQuery中的实现方式)

jQuery中的ajax问题