这个问题在这里已有答案:
我最近才开始涉及PHP / AJAX / jQuery,在我看来,这些技术的一个重要部分是 POST
和 GET
.
首先, POST
和 GET
之间有什么区别?通过实验,我知道 GET
将返回的变量及其值附加到URL字符串
website.com/directory/index.php?name=YourName&bday=YourBday
但 POST
没有 .
那么,这是唯一的区别还是有特定的规则或惯例使用其中一个?
其次,我还看到了PHP之外的 POST
和 GET
:也是在AJAX和jQuery中 . POST
和 GET
如何在这3个之间有所不同?它们是相同的想法,相同的功能,只是采用不同的方式?
8 回答
GET
和POST
是两种不同类型的HTTP请求 .根据Wikipedia:
和
基本上
GET
用于检索远程数据,POST
用于插入/更新远程数据 .HTTP / 1.1规范(RFC 2616)第9节Method Definitions包含有关
GET
和POST
以及其他HTTP方法的更多信息,如果您感兴趣的话 .除了解释每种方法的预期用途之外,该规范还提供了至少一个实际原因,为什么
GET
仅应用于检索数据:最后,将
GET
用于AJAX请求时的一个重要考虑因素是某些浏览器 - 特别是IE--会缓存GET
请求的结果 . 因此,例如,如果您使用相同的GET
请求进行轮询,即使您正在查询的数据正在服务器端更新,您也将始终获得相同的结果 . 缓解此问题的一种方法是通过附加时间戳使每个请求的URL唯一 .POST
与GET
不同,通常在请求正文中包含相关信息 . (GET
不应该有一个正文,所以除了cookie之外,传递信息的唯一地方就在URL中 . )除了保持URL相对清晰之外,POST
还允许您发送更多信息(因为URL的长度有限,因为所有实际目的),并允许您发送任何类型的数据(例如,文件上传表单,不能使用GET
- 他们必须使用POST
加上特殊的内容类型/编码) .除此之外,
POST
意味着请求会改变某些内容,并且不应该在您按下"back"按钮时看到您的浏览器询问您是否要重新提交表单数据的原因 .另一方面,
GET
应该是幂等的 - 这意味着你可以做一百万次,服务器每次都会做同样的事情(并且显示基本相同的结果) .虽然不是对差异的描述,但在选择正确的方法时,需要考虑以下几点 .
GET请求可以被浏览器缓存,这在使用ajax时可能是一个问题(或好处) .
GET请求向用户公开参数(POST也是如此,但它们不太明显) .
POST可以将更多信息传递给服务器,几乎可以是任何长度 .
学习底层HTTP协议
这类似于驾驶汽车 . 你自己开车去路上,但你不知道你必须遵守的任何标志,灯光或其他规则 . 显然,即使你知道如何,你也无法开车管理一辆车 . 至少不安全 . 不是为了你自己,也不是为了别人 .
您应该了解一下HTTP协议 . GET / POST与PHP / AJAX / jQuery或类似内容无关(至少不直接) . 他们使用它们是因为他们使用HTTP协议进行通信 . 除了
GET
和POST
之外,HTTP协议还有很多其他功能 .看看其中的一些,然后自己搜索:
wikipedia
W3C
HTTP Made Really Easy
......
POST和GET是两个HTTP request methods . GET通常用于检索某些数据,并且预期是幂等的(重复查询没有任何副作用),并且只能向服务器发送有限数量的参数数据 . 如果您不小心,某些浏览器通常会缓存GET请求 .
POST用于更改服务器状态 . 它携带更多数据,并且允许(并且经常预期)重复查询具有副作用,例如创建两个消息而不是一个消息 .
如果您正在使用RESTfully,则GET应该用于您只获取数据的请求,而POST应该用于您正在进行某些操作的请求 .
一些例子:
获取显示特定SO问题的页面
发表评论
单击“添加到购物车”按钮发送POST请求 .
使用POST,您还可以执行多部分mime编码,这意味着您也可以附加文件 . 此外,如果您在页面导航中使用帖子变量,则用户将收到警告,询问他们是否要重新提交post参数 . 通常它们在HTTP请求中看起来相同,但如果您需要向服务器“POST”某些东西,并且如果您需要从服务器获取某些东西,那么您应该坚持使用POST,就像它们的预期方式一样 .
POST和GET(当与AJAX一起使用时)之间唯一的“大”区别是因为GET是提供的URL,所以它们的长度有限(因为URL的长度不是无限的) .