我最近才开始接触PHP/AJAX/jQuery,在我看来,这些技术的一个重要部分是POST和GET。
首先,POST和GET之间有什么区别?通过实验,我知道GET将返回的变量及其值附加到URL字符串
website.example/directory/index.php?name=YourName&bday=YourBday
但是POST没有。
那么,这是唯一的区别吗?或者使用其中一种有特定的规则或惯例吗?
其次,我还在PHP之外的AJAX和jQuery中见过POST和GET。POST和GET在这三者之间有什么不同?它们是相同的理念,相同的功能,只是使用方式不同吗?
GET和POST是两种不同类型的HTTP请求。
根据维基百科:
GET请求指定资源的表示形式。请注意,GET不应该用于导致副作用的操作,例如在web应用程序中使用它来执行操作。其中一个原因是,GET可以被机器人或爬虫任意使用,它们不需要考虑请求应该引起的副作用。
and
POST将要处理的数据(例如,来自HTML表单)提交到已识别的资源。数据包含在请求体中。这可能导致创建新资源或更新现有资源,或者两者都有。
因此,本质上,GET用于检索远程数据,POST用于插入/更新远程数据。
HTTP/1.1规范(RFC 2616)第9节方法定义包含更多关于GET和POST以及其他HTTP方法的信息,如果你感兴趣的话。
除了解释每种方法的预期用途外,该规范还提供了至少一个实用的原因,说明为什么GET应该只用于检索数据:
使用HTTP协议的服务的作者不应该使用基于GET的表单来提交敏感数据,因为这会导致这些数据被编码在Request-URI中。许多现有的服务器、代理和用户代理将把请求URI记录在第三方可能看到的地方。服务器可以使用基于post的表单提交
最后,在对AJAX请求使用GET时需要考虑的一个重要问题是,某些浏览器(特别是IE)会缓存GET请求的结果。因此,例如,如果您使用相同的GET请求进行轮询,您将总是得到相同的结果,即使您正在查询的数据正在服务器端更新。缓解这个问题的一种方法是通过附加时间戳使每个请求的URL是唯一的。
GET和POST是两种不同类型的HTTP请求。
根据维基百科:
GET请求指定资源的表示形式。请注意,GET不应该用于导致副作用的操作,例如在web应用程序中使用它来执行操作。其中一个原因是,GET可以被机器人或爬虫任意使用,它们不需要考虑请求应该引起的副作用。
and
POST将要处理的数据(例如,来自HTML表单)提交到已识别的资源。数据包含在请求体中。这可能导致创建新资源或更新现有资源,或者两者都有。
因此,本质上,GET用于检索远程数据,POST用于插入/更新远程数据。
HTTP/1.1规范(RFC 2616)第9节方法定义包含更多关于GET和POST以及其他HTTP方法的信息,如果你感兴趣的话。
除了解释每种方法的预期用途外,该规范还提供了至少一个实用的原因,说明为什么GET应该只用于检索数据:
使用HTTP协议的服务的作者不应该使用基于GET的表单来提交敏感数据,因为这会导致这些数据被编码在Request-URI中。许多现有的服务器、代理和用户代理将把请求URI记录在第三方可能看到的地方。服务器可以使用基于post的表单提交
最后,在对AJAX请求使用GET时需要考虑的一个重要问题是,某些浏览器(特别是IE)会缓存GET请求的结果。因此,例如,如果您使用相同的GET请求进行轮询,您将总是得到相同的结果,即使您正在查询的数据正在服务器端更新。缓解这个问题的一种方法是通过附加时间戳使每个请求的URL是唯一的。