What is the difference between POST and GET?
我最近才接触到php/ajax/jquery,在我看来,这些技术的一个重要部分是
首先,
1 | website.com/directory/index.php?name=YourName&bday=YourBday |
但
那么,这是唯一的区别还是有使用其中一个或另一个的特定规则或约定?
其次,我还看到了PHP之外的
根据维基百科:
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.
因此,基本上,
HTTP/1.1规范(RFC 2616)第9节方法定义包含更多有关
除了解释每种方法的预期用途外,规范还提供了至少一个实际原因,说明为什么
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请求可以被浏览器缓存,这在使用Ajax时可能是一个问题(或好处)。
- GET请求向用户公开参数(POST也这样做,但它们不太可见)。
- post可以将更多的信息传递给服务器,几乎可以是任何长度。
post和get是两种HTTP请求方法。get通常用于检索一些数据,并且应该是等幂的(重复查询没有任何副作用),并且只能向服务器发送有限数量的参数数据。如果不小心,某些浏览器通常会默认缓存GET请求。
post用于更改服务器状态。它携带更多的数据,并且允许重复查询(通常是预期的)产生副作用,例如创建两条消息而不是一条消息。
如果您正在恢复工作,那么GET应该用于只获取数据的请求,而POST应该用于正在进行某些操作的请求。
一些例子:
获取显示特定问题的页面
发表评论
通过单击"添加到购物车"按钮发送帖子请求。
通过post,您还可以进行多部分的mime编码,这意味着您也可以附加文件。另外,如果您在页面导航中使用post变量,用户将收到一条警告,询问他们是否要重新提交post参数。通常在HTTP请求中它们看起来是相同的,但如果需要"向服务器发布"某些内容,则应坚持发布;如果需要从服务器获取某些内容,则应坚持"获取",因为这正是它们的预期方式。
post&get(与Ajax一起使用时)之间唯一的"大"区别是,get是提供url的,因此它们的长度受到限制(因为url的长度不是无限的)。