全面比较HTTP GET与POST方法
1. 基本信息比较
属性 | GET方法 | POST方法 |
历史: | 通常使用GET方法发送的数据作为URL的一部分将会被浏览器保存起来 | 使用POST方法提交的数据则不会作为URL的一部分,当然不会浏览器保存。 |
书签: | GET方法可能被浏览器当作书签(bookmark)保存 | POST方法则不会 |
回退与重新提交: | 使用GET方法的页面可以被回退并重新执行而不通知用户 | POST方法会通知用户再次提交 |
Form编码类型: | GET提交数据只支持 application/x-www-form-urlencoded | POST支持application/x-www-form-urlencoded与multipart/form-data |
参数: | 由于GET的参数一般都跟在URL后面,支持的数据大小一般在2K,有些服务器可以支持到64K。这个就是很多网页超过64K就挂掉的真实原因。因为服务器限制了。 | 发送参数,还可以是文件,大小在理论上没有限制。 |
被攻击: | GET方法提交数据很容易被黑客攻击,实施脚本绑架。 | POST方法相对GET方法不是那么容易被黑客攻击 |
数据类型限制: | GET方法提交数据只能是文本数据 | POST方法则不受限制,二进制文件也可以。 |
安全性: | GET方法的安全性比POST方法要低一些,原因是数据做为URL的一部分是可见的。而且被浏览器存在历史访问记录中。 | POST方法的安全性相对GET要高一些。因为参数数据不能被浏览器作为URL的一部分而存入历史访问记录中。 |
表单数据长度: | 由于表单数据做为URL的一部分而URL长度通常是有限制的。 | POST方法没有限制。 |
可用性: | GET方法通常不被用来发送密码与敏感信息。但是我发现还是有不少网站用GET来实现login。比如XXXX社区,它把login方法放在一个jquery完成JavaScript脚本中,用GET请求完成。 | POST方法可以用来发送密码与其他敏感信息。 |
可见性: | GET方法对所有人可见 | POST方法的变量是不可见的在URL中 |
缓存: | GET方法默认被缓存,这个就是很多时候用GET方法获取数据后面要跟个时间戳的原因 | POST方法默认不被缓存。 除非Response头设置了Cache-Control或者Expires属性值。 |
最大的变量值: | GET支持最大为7607个字符 | POST方法支持最大值为8MB |
应用场合: | GET最常用的场合是获取数据,浏览器获取网页时候绝大多数通过GET方法实现,大多数浏览器下载也是使用GET方法获取文件 | POST主要用来向服务器提交数据。 |
个人整理与总结,欢迎大家拍砖