HTTP中GET和POST的区别

来源:互联网 发布:信息技术网络研修心得 编辑:程序博客网 时间:2024/05/21 10:18

在HTTP中定义了与服务器交互的不同的方法,最基本的有GET 、POST、PUT、DELETE四种方法。分别对应着查、改、增、删四个操作。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。

一、

从原理上讲

1、在HTTP规范中,GET用于信息的获取,而且是安全幂等的。

解释一下:
(1)这里的安全仅是指他不修改资源信息。
(2)幂等的意味着对同一URL的多个请求应该返回同样的结果。

2、根据HTTP规范,POST表示可能修改变服务器上的资源的请求。

上面大概说了一下HTTP规范中GET和POST的一些原理性的问题。但在实际的做的时候,很多人却没有按照HTTP规范去做,导致这个问题的原因有很多,比如说:

  1.很多人贪方便,更新资源时用了GET,因为用POST必须要到FORM(表单),这样会麻烦一点。

  2.对资源的增,删,改,查操作,其实都可以通过GET/POST完成,不需要用到PUT和DELETE。

  3.另外一个是,早期的Web MVC框架设计者们并没有有意识地将URL当作抽象的资源来看待和设计,所以导致一个比较严重的问题是传统的Web MVC框架基本上都只支持GET和POST两种HTTP方法,而不支持PUT和DELETE方法。

二、

网上大多数版本的GET和POST的区别

看了大多数的文章都是这样写的:

  1.GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

  POST把提交的数据则放置在是HTTP包的包体中。

  2.”GET方式提交的数据最多只能是1024字节,理论上POST没有限制,可传较大量的数据,IIS4中最大为80KB,IIS5中为100KB”??!

  其实这样说是错误的,不准确的

  (1).实际上,URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。*IE对URL长度的限制是2083字节(2K+35)。既然是IE对URL长度的限制,那么不管是GET方法还是POST方法都存在这个限制。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。至于为什么会对url进行长度限制,URL长了,对服务器处理也是一种负担。原本一个会话就没有多少数据,现在如果有人恶意地构造几个几M大小的URL,并不停地访问你的服务器。服务器的最大并发数显然会下降。但是这个限制是针对所有HTTP请求的,与GET、POST没有关系。*
  注意这是限制是整个URL长度,而不仅仅是你的参数值数据长度。

  (2).理论上讲,POST是没有大小限制的,HTTP协议规范也没有进行大小限制,说“POST数据量存在80K/100K的大小限制”是不准确的,POST数据是没有限制的,起限制作用的是服务器的处理程序的处理能力。
  (3)HTTP没有要求,如果Method是POST数据就要放在BODY中。也没有要求,如果Method是GET,数据(参数)就一定要放在URL中而不能放在BODY中这只是HTML标准对HTTP协议的用法的约定。怎么能当成GET和POST的区别呢

而且,现在的Web Server都是支持GET中包含BODY这样的请求。虽然这种请求不可能从浏览器发出,但是现在的Web Server又不是只给浏览器用,已经完全地超出了HTML服务器的范畴了。

  3.POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的Security的含义,比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存,(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击。当然POST还有可能被截包重发,但相对来说还是POST比较安全一点

呵呵,说了这么多,好像GET和POST的区别又回到了第一段话上面,”GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。”是的,单从HTTP的角度去看,确实是只有这个区别了。在这里并不是争论他的区别到底是什么,说这么多只是为了更好的去理解他,才能更好的应用。

原创粉丝点击