POST和GET有什么区别?

时间:2010-08-13 13:38:56

标签: http post get http-method

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

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

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

POST没有。

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

其次,我还在PHP之外看过POSTGET:也在AJAX和jQuery中。这些3之间的POSTGET有何不同?它们是相同的想法,相同的功能,只是采用不同的方式?

7 个答案:

答案 0 :(得分:407)

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

根据Wikipedia

  

GET 请求指定资源的表示。请注意,GET不应用于导致副作用的操作,例如使用它在Web应用程序中执行操作。其中一个原因是机器人或爬虫可以任意使用GET,这不应该考虑请求应该产生的副作用。

  

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

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

<小时/> 如果您感兴趣,HTTP / 1.1规范(RFC 2616)第9节Method Definitions包含有关GETPOST以及其他HTTP方法的更多信息。

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

  

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

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

答案 1 :(得分:85)

POST不同,GET通常在请求正文中包含相关信息。 (GET不应该有正文,因此除了Cookie之外,传递信息的唯一位置在URL中。)除了保持URL相对清晰之外,POST还允许您发送更多信息(因为URL的长度有限,出于所有实际目的),并且允许您发送几乎任何类型的数据(例如,文件上载表单不能使用GET - 他们必须使用{{1}加上特殊内容类型/编码)。

除此之外,POST意味着请求会改变某些内容,不应该无所畏惧地重做。这就是为什么你有时会看到你的浏览器询问你是否想要在点击“返回”按钮时重新提交表单数据。

另一方面,

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

答案 2 :(得分:27)

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

  • 使用ajax时,浏览器可以缓存GET请求,这可能是一个问题(或好处)。
  • GET请求向用户公开参数(POST也是如此,但它们不太明显)。
  • POST可以将更多信息传递给服务器,几乎可以任意长度。

答案 3 :(得分:17)

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

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

答案 4 :(得分:11)

如果您正在使用RESTfully,则GET应该用于您只获取数据的请求,POST应该用于您正在进行某些操作的请求。

一些例子:

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

  • 发表评论

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

答案 5 :(得分:6)

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

答案 6 :(得分:1)

POST&amp;和POST之间唯一的“重大”区别GET(当与AJAX一起使用时)由于GET是提供的URL,因此它们的长度有限(因为URL的长度不是无限的)。