关于http:POST和GET有什么区别?

What is the difference between POST and GET?

本问题已经有最佳答案,请猛点这里访问。

我最近才接触到php/ajax/jquery,在我看来,这些技术的一个重要部分是POSTGET

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

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

POST没有。

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

其次,我还看到了PHP之外的POSTGET:也在ajax和jquery中。这三者之间,POSTGET有什么不同?它们是相同的想法,相同的功能,只是使用不同?


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

根据维基百科:

GET requests a representation of the specified resource. Note that GET should not be used for operations that cause side-effects, such as using it for taking actions in web applications. One reason for this is that GET may be used arbitrarily by robots or crawlers, which should not need to consider the side effects that a request should cause.

POST submits data to be processed (e.g., from an HTML form) to the identified resource. The data is included in the body of the request. This may result in the creation of a new resource or the updates of existing resources or both.

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


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

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

Authors of services which use the HTTP protocol SHOULD NOT use GET based forms for the submission of sensitive data, because this will cause this data to be encoded in the Request-URI. Many existing servers, proxies, and user agents will log the request URI in some place where it might be visible to third parties. Servers can use POST-based form submission instead


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


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

除此之外,POST还意味着请求将改变某些东西,不应随意地重做。这就是为什么当您点击"后退"按钮时,有时会看到浏览器询问您是否要重新提交表单数据。

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


虽然不是对差异的描述,但下面是选择正确方法时需要考虑的几个问题。

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


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

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


如果您正在恢复工作,那么GET应该用于只获取数据的请求,而POST应该用于正在进行某些操作的请求。

一些例子:

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

  • 发表评论

  • 通过单击"添加到购物车"按钮发送帖子请求。


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


post&get(与Ajax一起使用时)之间唯一的"大"区别是,get是提供url的,因此它们的长度受到限制(因为url的长度不是无限的)。