GET与POST的区别这个问题因为在很多面试题都出现过,所以上网搜索答案,可以发现一大堆,大多数答案看起来都大同小异,但没有一个标准的答案,都是各自对GET与POST的理解,因此,我也根据自己的理解,说明GET与POST的异同。
GET与POST都是HTTP协议(HTTP协议详解)中的请求方式,而HTTP是基于TCP/IP协议进行数据传输,所以从本质上这两种请求方式并无区别,但是,如果HTTP协议中一个请求方式可以完美完成任务,那我想就没有这个问题存在了,但既然会设计出来不同的方式,那肯定是对应要解决一些问题。以下展开。
- 安全问题
网上的答案都有一条区别说明:GET请求时传输数据是通过URL携带参数传播,而POST是通过HTTP的header数据包传输的数据。
我们知道,在互联网世界中,用技术的角度审视,无非就是“增删改查”,而互联网产品,最重要的就是数据库信息,如果仅仅是查询数据库信息,通过GET传参倒也没什么,只是对非法分子扒数据方便一些,但是如果用GET传参进行“增删改”数据操作,那严重的问题就出来了,数据安全怎么办?
比如用户登录请求:www.example.com?name=test&password=123
用户的密码直接显示出来,这能行
再有,如果通过get传参去修改数据,那稍微懂点相关语言知识的人都可以随便更改URL中的参数,那数据库是什么后果,想想都
所以,在HTTP规范中,GET请求方式用于信息获取,并且同一URL通过GET获取的页面信息应该永远相同。
2. 传输数据大小限制问题
网上的答案也有这条:GET请求时的参数大小需要控制在2KB以内,POST请求时对参数大小没有限制。
然而,在Http1.1协议中并没有提出针对URL的长度限制,RFC 协议里面是这样描述的,HTTP协议并不对 URI 的长度做任何的限制,服务器端 必须能够处理任何它们所提供服务都能接受的 URI,并且能够处理无限长度的 URI,如果服务器不能处理过长的URI,那么应该返回414状态码。
可是虽然Http协议规定了,但是各个浏览器为了保护自己的运行资源空间,还是对URI设置了自己的长度限制。所以依赖URL传参的GET请求方式所传输的参数大小也会有一定的限制。以下是个各浏览器URI大小限制表。
Microsoft Internet Explorer (Browser) IE 浏览器对URL的最大限制为2083个字符,如果超过这个数字,提交按钮没有任何反应。
Firefox (Browser) 对于Firefox浏览器URL的长度限制为65,536个字符。
Safari (Browser) URL最大长度限制为 80,000个字符。
Opera (Browser) URL最大长度限制为190,000个字符。
Google (chrome) URL最大长度限制为8182个字符。
Apache (Server) 能接受最大url长度为8,192个字符。
Microsoft Internet Information Server(IIS) 能接受最大url的长度为16,384个字符。
IE 11 能接受最大url的长度为2,047个字符。