HTTP - GET和POST的区别

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


  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攻击的。

好了,个人笔记写完了,有兴趣的朋友能够拍砖。哈哈,交流学习下。算法

相关文章
相关标签/搜索