POST和GET有什么区别?

我最近才开始介入PHP / AJAX / jQuery,在我看来,这些技术的重要组成部分是POSTGET

首先, POSTGET什么区别? 通过实验,我知道GET将返回variables及其值附加到URLstring

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

POST不。

那么,这是唯一的区别,还是有特定的规则或惯例使用一个或另一个?

其次,我还在PHP之外看到了POSTGET :也是在AJAX和jQuery中。 POSTGET如何在这三个之间有所不同? 他们是相同的想法,相同的function,只是利用不同?

GETPOST是两种不同types的HTTP请求。

根据维基百科 :

GET请求指定资源的表示。 请注意,不应将GET用于导致副作用的操作,例如将其用于在Web应用程序中执行操作。 其中一个原因是GET可能被机器人或抓取工具任意使用,不需要考虑请求应该引起的副作用。

POST提交要处理的数据(例如,从HTML表单)到已标识的资源。 数据包含在请求的正文中。 这可能会导致新资源的创build或现有资源的更新,或两者的结果。

所以基本上GET是用来检索远程数据的, POST用来插入/更新远程数据。


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

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

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


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

GET不同, POST通常在请求的主体中具有相关信息。 (一个GET不应该有一个主体,所以除了cookie之外,唯一的地方是传递信息在URL中。)除了保持URL相对更清洁, POST还可以让你发送更多的信息(因为URL的长度是有限的,所有实际的目的),并允许你发送几乎任何types的数据(例如,file uploadforms,不能使用GET – 他们必须使用POST加特殊的内容types/编码)。

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

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

学习底层的HTTP协议

这与驾驶汽车相似。 你给自己买一辆车,走上路,但是你不知道任何你必须遵守的标志,灯光​​或其他规则。 显然即使你知道如何pipe理一辆车,你也无法驾驶。 至less不安全。 不是为了自己,也不是为了别人。

您应该了解一下HTTP协议。 GET / POST与PHP / AJAX / jQuery或类似的相关(至less不是直接的)。 他们使用它们是因为他们使用HTTP协议进行通信。 HTTP协议还有更多的不仅仅是GETPOST

看看其中的一些,然后自己search:

  • 维基百科
  • W3C
  • HTTP真的很简单

虽然不是对差异的描述,但是在select正确的方法时,还需要考虑以下几点。

  • GET请求可以被浏览器caching,这在使用Ajax时可能是一个问题(或者是有益的)。
  • GET请求向用户公开参数(POST也可以,但是不太明显)。
  • POST可以将更多的信息传递给服务器,并且可以是几乎任何长度的。

POST和GET是两个HTTP请求方法 。 GET通常旨在检索一些数据,并且预期会是幂等的(重复查询没有任何副作用),并且只能将有限的参数数据发送到服务器。 如果您不小心,GET请求通常会被某些浏览器默认caching。

POST用于更改服务器状态。 它携带更多的数据,并且重复查询被允许(并且经常期望)具有诸如创build两个消息而不是一个的副作用。

如果您正在以REST方式工作,那么GET应该用于您只能获取数据的请求,并且POST应该用于请求发生的请求。

一些例子:

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

  • 发表评论

  • 点击“添加到购物车”button并发送POST请求。

通过POST,您还可以执行多部分MIME编码,这意味着您也可以附加文件。 另外,如果您在页面导航中使用后置variables,则用户将收到警告,询问是否要重新提交后置参数。 通常情况下,他们在HTTP请求中看起来是一样的,但是如果您需要将某些内容“POST”到服务器,那么您应该坚持使用POST,而如果您需要从服务器获取某些内容,请按照预期方式进行操作。

POST和GET(当使用AJAX时)之间唯一的“大”差异是因为GET提供了URL,所以它们的长度有限(因为URL长度无限)。