POST和GET的区别是什么?

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

首先,POSTGET之间有什么区别?通过实验,我知道GET将返回的变量及其值附加到URL字符串

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

但是POST没有。

那么,这是唯一的区别吗?或者使用其中一种有特定的规则或惯例吗?

其次,我还在PHP之外的AJAX和jQuery中见过POSTGET。这三者之间POSTGET有什么不同?它们是相同的理念,相同的功能,只是使用方式不同吗?

741020 次浏览

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

根据维基百科:

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

而且

帖子提交要处理的数据(例如,从HTML表单)到标识的资源。数据包含在请求体中。这可能导致创建新资源或更新现有资源,或者两者都有。

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

人力资源/ > < p > < HTTP/1.1规范(RFC 2616)第9节< b > < / b >方法定义包含关于GETPOST以及其他HTTP方法的更多信息,如果你感兴趣的话

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

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

人力资源/ > < p > < 最后,在AJAX请求中使用GET时需要考虑的一个重要问题是,一些浏览器——尤其是IE——会缓存GET请求的结果。因此,例如,如果你使用相同的GET请求进行轮询,你将总是得到相同的结果,即使你正在查询的数据正在服务器端更新。缓解这个问题的一种方法是通过添加时间戳使每个请求的URL是唯一的

如果你正在使用安静地, GET应该用于你只获取数据的请求,而POST应该用于你正在发生一些事情的请求。

一些例子:

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

  • 发表评论

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

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

POST用于更改服务器状态。它携带了更多的数据,并且允许重复查询(通常也希望如此)会产生一些副作用,比如创建两个而不是一个消息。

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

POST和amp;GET(当使用AJAX时)是由于GET是URL提供的,它们的长度是有限的(因为URL不是无限的长度)。

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

除此之外,POST意味着请求将会改变一些东西,并且不应该被随意地重做。这就是为什么当你点击“返回”按钮时,浏览器会询问你是否要重新提交表单数据。

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

虽然不是对差异的描述,但下面是在选择正确方法时需要考虑的一些事情。

  • GET请求可以被浏览器缓存,这在使用ajax时可能是一个问题(或好处)。
  • GET请求向用户公开参数(POST也是,但不太可见)。
  • POST可以向服务器传递更多的信息,并且几乎可以是任意长度。