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的角度去看,确实是只有这个区别了。在这里并不是争论他的区别到底是什么,说这么多只是为了更好的去理解他,才能更好的应用。
- http中get和post的区别
- http中get和post的区别
- HTTP中POST和GET的区别
- HTTP中GET和POST的区别
- HTTP中GET和POST的区别
- http中get 和 post的区别
- HTTP 中get 和post的区别
- Http中get和post的区别
- Http中Get和Post的区别
- HTTP中Get和Post的区别
- http中get和post的区别
- http中get和post的区别
- HTTP中POST和GET的区别
- HTTP中Get和Post的区别
- HTTP中GET和POST的区别
- HTTP中GET和POST的区别
- HTTP中get和post的区别
- Http中get和post的区别
- Matconvnet 训练自己的数据(使用现有模型)
- 第十三章 RememberMe——《跟我学Shiro》
- Swift--11类的使用
- springboot 启动异常 javax/servlet/ServletContext Unable to start embedded container; nested exception is
- mysql修改编码
- HTTP中GET和POST的区别
- HDU-1024 Max Sum Plus Plus(DP)
- C++/MFC-对话框
- xmlbeans问题(深刻)
- html、js if判断
- 第十四章 SSL——《跟我学Shiro》
- python中 with...as的用法
- 理解http304响应
- hibernate 与 mybatis