81

Ajax请求的GETPOST有什么区别?

我看不出这两者之间有什么区别,除了当我使用GET时,参数是在 URL 中发送的,这对我来说并没有什么区别,因为所有请求都是在后台发出的,而用户没有找到任何不同之处。

编辑:什么是PUTDELETE方法用于?

4

10 回答 10

138

GET 是为从服务器获取数据而设计的。POST(以及鲜为人知的朋友 PUT 和 DELETE)是为修改服务器上的数据而设计的。

GET 请求绝不应该导致从应用程序中删除数据。如果你有一个链接,你可以点击一个 GET 来删除数据,然后谷歌爬取你的网站可以点击你所有的“删除”链接。

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

如果表单的处理是幂等的(即它对世界状态没有持久的可观察影响),那么表单方法应该是 GET。许多数据库搜索没有明显的副作用,是查询表单的理想应用。

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

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

于 2009-04-03T19:31:13.367 回答
28

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

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

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

于 2009-04-03T19:30:56.313 回答
19

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

于 2009-04-03T19:33:47.570 回答
4

GET 请求更容易在 CSRF(跨站请求伪造)攻击中被利用。即虚假的 POST 请求需要在用户端启用 Javascript,而虚假的 GET 请求仍然可能仅使用 img、script 标签。

于 2009-04-03T20:53:28.753 回答
3

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

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

从 REST 的角度来看,GET 请求应该没有副作用——它们不应该修改数据。因此,如果您只是通过 ID 获取资源,这是有道理的,但如果您正在提交对资源的更改,您应该对 http 动词使用 PUT、POST 或 UPDATE。

于 2009-04-03T19:33:54.340 回答
3

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

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

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
于 2016-11-27T08:25:39.733 回答
2

首先,一般信息。GET仅在读取数据时使用,POST在更改数据库、txt 文件等内容时使用。

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

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

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

于 2014-05-10T20:03:33.120 回答
1

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

就像 Ryan Smith 所说的,最好使用 POST 发送大量数据,并且在使用其他语言/特殊字符的情况下少担心(通常所有专业的 javascript 框架应该没有任何问题来处理,但是我认为使用 POST 的担忧更少)。

在我看来,从 REST 角度来看,您可以将其用于新项目(以保持与整个项目的一致性)。

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

于 2009-04-03T20:03:05.253 回答
0

无论您使用的是 Ajax 、GETHTML还是. 以下是相关定义:POSTformcurl

于 2009-04-03T19:40:59.253 回答
-2

如果您传递的任何参数包含可能在 URL 中弄乱的字符(例如空格),则使用 POST。否则,您可以使用 GET。

一般来说,如果你只是传递一些小参数,你会使用 GET。但是为了传递用户提交的信息,如博客条目、文本等,使用 POST 是一个很好的做法。

还有一些框架完全依赖基于分段的 url(例如,site.com/products/133而不是site.com/products.php?id=333这些框架取消设置 GET 变量以确保安全。在这种情况下,您将始终使用 POST。

于 2009-04-03T19:34:01.300 回答