421

我最近才开始涉足 PHP/AJAX/jQuery,在我看来,这些技术的一个重要部分是POSTGET.

首先,POST和 和有什么不一样GET?通过实验,我知道GET将返回的变量及其值附加到 URL 字符串

website.com/directory/index.php?name=YourName&bday=YourBday

POST没有。

那么,这是唯一的区别,还是有使用其中一种或另一种的特定规则或约定?

其次,我还看到POSTGETPHP 之外的其他方面:也在 AJAX 和 jQuery 中。POST这三个有什么GET区别?它们是相同的想法,相同的功能,只是使用方式不同吗?

4

7 回答 7

480

GETPOST是两种不同类型的 HTTP 请求。

根据维基百科

GET请求指定资源的表示。请注意,GET 不应用于会导致副作用的操作,例如在 Web 应用程序中使用它来执行操作。这样做的一个原因是 GET 可能被机器人或爬虫任意使用,它们不需要考虑请求应该引起的副作用。

POST将要处理的数据(例如,来自 HTML 表单)提交给识别的资源。数据包含在请求的正文中。这可能导致创建新资源或更新现有资源或两者兼而有之。

所以本质上GET是用于检索远程数据,并POST用于插入/更新远程数据。


HTTP/1.1 规范 (RFC 2616) 第 9 节方法定义包含有关其他 HTTP 方法GET以及POST其他 HTTP 方法的更多信息,如果您感兴趣的话。

除了解释每种方法的预期用途之外,该规范还提供了至少一个实际原因,说明为什么GET只能用于检索数据:

使用 HTTP 协议的服务的作者不应该使用基于 GET 的表单来提交敏感数据,因为这将导致该数据被编码在 Request-URI 中。许多现有的服务器、代理和用户代理会将请求 URI 记录在第三方可能看到的某个地方。服务器可以改用基于 POST 的表单提交


最后,用于 AJAX 请求时的一个重要考虑因素GET是某些浏览器 - 特别是 IE - 将缓存GET请求的结果。因此,例如,如果您使用相同的GET请求进行轮询,您将始终得到相同的结果,即使您正在查询的数据正在服务器端更新。缓解此问题的一种方法是通过附加时间戳使每个请求的 URL 唯一。

于 2010-08-13T13:42:16.510 回答
112

APOST与 a 不同GET,通常在请求正文中包含相关信息。(AGET不应该有正文,所以除了 cookie,唯一传递信息的地方就是 URL。)除了保持 URL 相对干净之外,POST还可以让您发送更多信息(因为 URL 的长度有限,为了所有实用目的),并允许您发送几乎任何类型的数据(例如,文件上传表单不能使用GET——它们必须使用POST加上特殊的内容类型/编码)。

除此之外, aPOST意味着请求会改变一些东西,不应该随意重做。这就是为什么您有时会看到您的浏览器在您点击“返回”按钮时询问您是否要重新提交表单数据。

GET另一方面,应该是幂等的——这意味着你可以做一百万次,服务器每次都会做同样的事情(并显示基本相同的结果)。

于 2010-08-13T13:50:14.940 回答
38

虽然不是对差异的描述,但以下是在选择正确方法时需要考虑的几件事。

  • GET 请求可以被浏览器缓存,这在使用 ajax 时可能是一个问题(或好处)。
  • GET 请求向用户公开参数(POST 也可以,但它们不太明显)。
  • POST 可以将更多信息传递给服务器,并且几乎可以是任意长度。
于 2010-08-13T13:58:24.770 回答
24

POST 和 GET 是两种HTTP 请求方法。GET 通常是为了检索一些数据,并且期望是幂等的(重复查询没有任何副作用)并且只能向服务器发送有限数量的参数数据。如果您不小心,某些浏览器通常会默认缓存 GET 请求。

POST 旨在更改服务器状态。它携带更多数据,并且允许(并且通常预期)重复查询会产生副作用,例如创建两条消息而不是一条消息。

于 2010-08-13T13:44:33.147 回答
23

如果您正在以RESTfully方式工作,则 GET 应该用于您只获取数据的请求,而 POST 应该用于您正在做某事的请求。

一些例子:

  • 获取显示特定 SO 问题的页面

  • 发表评论

  • 通过单击“添加到购物车”按钮发送 POST 请求。

于 2010-08-13T13:42:57.143 回答
9

使用 POST,您还可以进行多部分 mime 编码,这意味着您也可以附加文件。此外,如果您在页面导航中使用 post 变量,用户将收到一条警告,询问他们是否要重新提交 post 参数。通常它们在 HTTP 请求中看起来是一样的,但是如果您需要将某些内容“发布”到服务器,则应该坚持使用 POST,如果您需要从服务器获取某些内容,则应该坚持使用“GET”,因为这就是它们的预期方式。

于 2010-08-13T13:45:40.827 回答
1

POST 和 GET 之间唯一的“大”区别(将它们与 AJAX 一起使用时)是因为 GET 是 URL 提供的,所以它们的长度是有限的(因为 URL 的长度不是无限的)。

于 2010-08-13T13:46:21.573 回答