当前位置:  开发笔记 > 编程语言 > 正文

POST和GET有什么区别?

如何解决《POST和GET有什么区别?》经验,为你挑选了6个好方法。

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

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

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

POST不是.

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

其次,我也看到POSTGETPHP之外:还AJAX和jQuery.这3个怎么做POSTGET不同?它们是相同的想法,相同的功能,只是采用不同的方式?



1> Justin Ethie..:

GET并且POST是两种不同类型的HTTP请求.

根据维基百科:

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

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

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


HTTP/1.1规范(RFC 2616)第9条方法的定义包含了更多的信息GETPOST以及其他HTTP方法,如果你有兴趣.

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

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


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


@Hristo:您可以使用`GET`在服务器上进行更新.反之亦然.您可以使用`POST`来获取一些数据.再次使用我对汽车的类比:即使你的汽车有倒档,你也不会开车反向工作.即使你当然可以.
@Hristo:GET本身没有问题 - 每个网站的主页都是通过GET获得的,就像所有链接一样,因此任何安全问题都可能破坏整个网络.当Web开发人员不知道GET应该是幂等的,并将其用于诸如"删除"或"添加到购物车"链接/按钮之类的事情时,就会出现问题.
..有趣.感谢您解释此背后的缓存.两个问题...... 1.这是不是意味着使用`GET`存在安全问题.这是否意味着我可以使用`POST`来做与GET相同的事情?
@barlop - "数据包含在请求正文中."
缓解IE缓存GET调用的另一种方法是为服务器端的传入GET请求设置标头.这些标头会阻止客户端缓存.

2> cHao..:

POST与a不同GET,A 通常在请求正文中具有相关信息.(A GET不应该有一个主体,所以除了cookie之外,传递信息的唯一地方就在URL中.)除了保持URL相对清晰之外,POST还可以发送更多信息(因为URL的长度有限,对于所有实际目的),并允许您发送几乎任何类型的数据(例如,文件上传表单,不能使用GET- 他们必须使用POST加上一个特殊的内容类型/编码).

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

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



3> Alex..:

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

GET请求可以被浏览器缓存,这在使用ajax时可能是一个问题(或好处).

GET请求向用户公开参数(POST也是如此,但它们不太明显).

POST可以将更多信息传递给服务器,几乎可以是任何长度.


有没有理由在描述POST时没有使用"请求"这个词?(尽管很多人都说POSt是一种请求)
因此,如果POST公开参数也不太明显,那么如果我担心看到敏感信息,那么我使用POST或GET是否正确无关紧要?寻找信息的人可能对如何在POST中查看参数了解得足够多.只是想知道我是否正确理解.谢谢.

4> Victor Nicol..:

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

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



5> Skilldrick..:

如果您正在使用REST风格,GET应该用于请求下,如果只获取数据,并POST应该用于在您正在事情发生的请求.

一些例子:

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

发表评论

单击"添加到购物车"按钮发送POST请求.



6> Matt William..:

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

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有