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】:
GET
和POST
之间的另一个区别是浏览器中处理缓存的方式。 POST
响应永远不会被缓存。 GET
可能会也可能不会根据响应标头中指定的缓存规则进行缓存。
【讨论】:
【参考方案4】:拥有它们的两个主要原因:
GET
请求对大小有一些相当严格的限制; POST
通常能够包含更多信息。
后端可能需要GET
或POST
,具体取决于其设计方式。我们需要灵活地执行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?的主要内容,如果未能解决你的问题,请参考以下文章
Chrome 中的 AJAX 发送选项而不是 GET/POST/PUT/DELETE?