HTTP - GET和POST的区别

网上有很多文章介绍这两种HTTP请求的区别,我也不懂,主要还是看了一些文章,在这里写下一些笔记。


  1. 语义不同
    在HTTP协议中,最初规定GET是用来查询或者获取资料,只读,POST用于修改数据,可写。因此可以看到两种方式的使用场景上就有很大的区别,在RESTful中更是强调了这两种HTTP请求方式目的。规定是死的,人是活的,所以很多人为了方便GET也用于修改数据,比如删除某个记录,这样很容易被CSRF,题外话。
  2. 发送数据
    HTTP协议中,GET和POST都可以先服务器发送数据,GET的提交的数据只能在URL中表示,而URL只允许部分可见字符,其他字符都需要转换%xx的形式;POST提交的数据可以在URL中,也可以在BODY里,在BODY里面的数据可以是URLEncoded的普通数据,同样是可以是直接的二进制流数据,这样可以剩下不少流量。一个字节变成%xx,长度就是原来的三倍了。
  3. 长度限制
    在HTTP协议中,GET和POST提交的数据长度是没有限制的。但是一般的浏览器和服务器软件都会限制URL的长度,因为一般服务器会把URL当成字符串来进行使用,一个超长的字符串肯定会影响到服务器的性能。而POST提交数据虽然会比GET的数据大很多,但是一般服务器还是会限制其大小,在nginx中,有一个配置项为client_max_body_size就是来设置POST的body数据大小的,有兴趣的朋友可以试一下。
  4. 安全性
    安全性和这两种方式没有任何关系。数据在HTTP上面走,肯定会被别人嗅探到,关键还是看你对数据的加密程度和算法了。上面说道了GET进行一些写操作容易被csrf,其实只要在GET请求中带上一些防御csrf的措施,那就不会被CSRF攻击了。反之如果使用的是POST方式,但是没有部署anti-CSRF方案的话,同样会被csrf攻击的。

好了,我的笔记写完了,有兴趣的朋友可以拍砖。哈哈,交流学习下。

posted @ 2014-10-11 00:06  HuangJacky  阅读(509)  评论(0编辑  收藏  举报
AdminLogin