POST方法和GET方法的区别

it2022-05-05  147

最近学习python的Django模块,可谓困难重重、踩坑无数,归根结底还是基础太薄弱,什么都不懂就想做这做那,经群里有人提醒:这是在走弯路!自己想想,还是要先广泛学习,从基础做起。

在学习做注册、登陆页面时往往采用POST请求,下面比较两种的区别。

从表面来看,GET方法和HOST方法是相同的:这两个方法都允许对Web页面发起以一个请求,并根据请求向Web页面发送数据。对于AJAX请求来说,在大多数情况下将使用GET方法,因为出于对AJAX性能的考虑,GET方法的速度将会略快一些。但是这两个方法也还存在一些值得注意的差别,这些差别不但表明了这两个方法在语义上的不同,也表明了二者在技术和安全方面的差异。

1.GET方法用于那些对任何状态都有没有实际的持续性改变的请求(HTTP的规范将这一类型的请求称为幂等的(idempotent)请求)。例如,当发起一个请求时,如果该请求只是简单地从数据库中获取数据时,GET方法将非常适合。如果一个请求的结果将导致数据库发生改变——例如通过插入、更新、或删除操作来维护内容,对数据进行排序或者更新数据时——则POST方法是最合适的。然而这一差异仅仅是语法上的。

2.当用户使用浏览器的back按钮回退并重新提交表单时,浏览器将使用POST方法自动阻止表单再次被提交,POST方法正适合用于这种操作已经发生的情形。这一技术差别可用于阻止表单数据的重复提交,但并不是完全有效的,因为我们仍然需要对服务器端程序进行设计,以便处理表单数据可能被重复提交的问题,毕竟任何疏漏都可能出现问题!另一方面,GET方法并没有提供自动的保护机制来阻止表单的重复提交。对于AJAX程序设计来说,几乎不用考虑GET方法和POST方法的这一差别,因为如果在AJAX程序中没有专门设计这一功能的话,用户将无法重复提交一个POST请求。

3.与POST方法相比,GET方法对请求的数据长度方面的限制更少。这是一个可能影响到Web应用程序的技术差别。根据浏览器的不同,GET请求的长度限制也是不同的。但是RFC2068指明对于长度超过255字节的URL,服务器应该谨慎地进行处理。由于GET请求的数据是作为URL的一部分被包含在URL(即Web页面的地址)中的,因此GET请求将受限制于浏览器所支持的URI长度。IE浏览器可以支持最大2083个字符的URI,这已经相当长了。另一方面,除了服务器所配置的可接收请求数据的长度限制之外,POST方法从理论上来说在数据长度上并没有任何限制。例如,在默认情况下,PHP被配置为可接受8MB或者小于8MB的POST请求。服务器的配置及其他一些条件,如可以执行多长的脚本、可以使用多大的内存等,这些因素共同定义了POST请求所能携带的数据长度。在客户端,除客户端计算机的硬件、网络和处理能力的限制之外,POST请求并没有什么硬性限制(hard limitation)。

4.POST方法和GET方法的另外一个技术差别就是它们可以采用不同的方式进行编码,当时图使用POST方法上传文件时,这一差别就会体现出来,但是由于AJAX并不能以异步方式处理文件的上传,因此这一差别并不会影响到AJAX的功能。

要想获得这两个方法关于性能方面的更多信息,请参考Yahoo开发者网站:http://developer.yahoo.com/performance/rules.html (摘自RIchard York所著《jQuery JavaScript与css开发入门经典》)


最新回复(0)