在Ajax中获取GET与POST

时间:2009-04-03 19:28:06

标签: ajax semantics

对于 Ajax 请求, GET POST 之间有什么区别?

我认为这两者之间没有任何区别,只是当我使用 GET 时,参数会在URL中发送,这对我来说并没有什么不同,因为所有请求都是在背景上制作,用户没有发现任何差异。

编辑: 什么是 PUT DELETE 用于?

的方法

10 个答案:

答案 0 :(得分:131)

GET旨在从服务器获取数据。 POST(以及鲜为人知的朋友PUT和DELETE)用于修改服务器上的数据。

GET请求绝不应导致从应用程序中删除数据。如果您有链接,可以点击GET删除数据,然后Google抓取您的网站可以点击所有“删除”链接。

可以找到规范的答案here,它引用了HTML 2.0规范:

  

如果表格的处理是幂等的(即它没有持久性   对状态的可观察效果   世界),然后形式方法应该是   得到。许多数据库搜索没有   可见的副作用,使理想   查询表格的应用。

     

如果与表单处理相关联的服务有副作用   (例如,修改一个   数据库或订阅   服务),方法应该是POST。

在AJAX调用中,您需要使用服务器支持的任何方法。您应始终设计服务器,以便POST / PUT / DELETE调用修改数据的操作。其他评论有REST链接,通常将C / R / U / D映射到“POST或PUT”(创建)/ GET(读取)/ PUT(更新)/删除(删除)。

答案 1 :(得分:24)

如果您通过HTTPS发送大量数据或敏感数据,则需要使用POST。如果它只是一个简单的参数,我会使用GET。

GET请求对可以发送的数据量有限制。我忘记了确切的数字,但如果您发送任何实质内容,这可能会导致问题。

基本上GET和POST之间的区别在于,在GET请求中,参数在URL中传递,而在POST中,参数包含在消息体中。

答案 2 :(得分:19)

它的AJAX是否无关紧要。关于你正在采取的行动。我建议遵循REST的原则。其中有更新,删除等的进一步规定......

答案 3 :(得分:4)

在CSRF(跨站点请求伪造)攻击中更容易利用GET请求。即假的POST请求需要在用户端启用Javascript,而使用img脚本标记仍然可以使用伪GET请求。

答案 4 :(得分:3)

许多Web服务器限制了可以作为URL的一部分传递的数据的长度,因此GET请求可能会以难以调试的奇怪方式中断。

此外,大多数服务器软件都会在访问日志中记录URL,因此如果您在GET请求中传递敏感信息(例如密码),则很可能会以明文形式写入磁盘。

从REST的角度来看,GET请求应该没有副作用 - 它们不应该修改数据。所以,如果您只是通过ID获取资源,这是有道理的,但如果您要对资源进行更改,则应该对http动词使用PUT,POST或UPDATE。

答案 5 :(得分:2)

两者都用于发送一些数据并使用该数据接收一些响应。

获取:获取服务器中的信息存储。 IE浏览器。搜索,推特,人员信息。如果要发送信息,请使用process.php?name = subroto获取请求发送请求 所以它基本上通过url发送信息。网址无法处理超过2083个字符。那么对于博客文章你能记住它是不可能的吗?

POST:Post做同样的事情。用户注册,用户登录,大数据发送,博客帖子。 如果您需要发送安全信息,请使用post或大数据,因为它不通过url。

AJAX:$ .get()和$ .post()包含$ .ajax()子集的功能。它有很多配置。

$。get()方法,这是$ .Ajax()的一种简写。使用$ .get()时,不是传入对象,而是传入参数。至少,您需要前两个参数,即您要检索的文件的URL(即“test.txt”)和成功回调。

要点:

$.get( url [, data ] [, success ] [, dataType ] )
$.post( url [, data ] [, success ] [, dataType ] ) // for sending secure or Large information
$.ajax( url [, settings ] )  // More Configaration

答案 6 :(得分:1)

关于我,我更喜欢POST。我保留得到的事件,我知道发送的值仅限于具有“控制”的数据,例如,用ID来检索项目。例如,“getitem?id = 123”,“deleteImtem?id = 123”,...对于其他情况,当我有一个用户可填写的表格时,我更喜欢POST。

像瑞安史密斯所说的那样,最好使用POST来发送大量数据,而在其他语言/特殊字符中使用的情况则更少(通常所有主要的javascript框架都不应该有任何问题需要处理有了这个,但我认为使用POST不太谨慎。

对于REST透视图,在我看来,您可以将它与新项目一起使用(以保持与整个项目的一致性)。

最后,也许在网络中使用一些程序(URL loguers(即:查看员工是否在非自动化网站上丢失了时间,......)代理,...)或任何其他类型的工具可以拦截查询。有些人会在报告中显示您使用GET发送的params,将其视为不同的网页。但在这种情况下,可能不是你的问题,它从项目变为另一个! ;)

答案 7 :(得分:1)

首先,一般信息。如果您只读取数据,请使用GET,如果您更改数据库,txt文件等内容,请使用POST

但问题是,某些浏览器会缓存GET个结果。我在IE7中遇到了AJAX个请求的问题,但最后我发现浏览器会缓存GET个结果。我重新考虑了流程并将我的请求更改为POST

因此,如果您不想缓存,请不要使用GET

(当然你可以在GET操作中禁用缓存。但我并不喜欢它)

答案 8 :(得分:0)

无论您使用的是Ajax,HTML GET还是POSTformcurl之间的差异都是相同的。以下是相关定义:

答案 9 :(得分:-2)

如果要传递任何带有可能在URL中混乱的字符的参数(例如空格),则使用POST。否则你可以使用GET。

通常情况下,如果您只是传递一些小参数,那么您将使用GET。但是,为了传递用户提交的信息,如博客条目,文本等,使用POST是一个很好的做法。

还有一些框架完全依赖基于段的URL(例如site.com/products/133而不是site.com/products.php?id=333,并且这些框架取消了GET变量的安全性。在这种情况下,你会使用POST allt time