GET与POST区别
GET与POST都是HTTP协议(HTTP协议详解)中的请求方式,而HTTP是基于TCP/IP协议进行数据传输,所以从本质上这两种请求方式并无区别,但是,如果HTTP协议中一个请求方式可以完美完成任务,那我想就没有这个问题存在了,但既然会设计出来不同的方式,那肯定是对应要解决一些问题。以下展开。
安全问题
GET请求时传输数据是通过URL携带参数传播,而POST是通过HTTP的header数据包传输的数据。
我们知道,在互联网世界中,用技术的角度审视,无非就是“增删改查”,而互联网产品,最重要的就是数据库信息,如果仅仅是查询数据库信息,通过GET传参倒也没什么,只是对非法分子扒数据方便一些,但是如果用GET传参进行“增删改”数据操作,那严重的问题就出来了,数据安全怎么办?
比如用户登录请求:用户的密码直接显示出来,这能行
再有,如果通过get传参去修改数据,那稍微懂点相关语言知识的人都可以随便更改URL中的参数,那数据库是什么后果,想想都可怕。所以,在HTTP规范中,GET请求方式用于信息获取,并且同一URL通过GET获取的页面信息应该永远相同。
传输数据大小限制问题
GET请求时的参数大小需要控制在2KB以内,POST请求时对参数大小没有限制。
然而,在Http1.1协议中并没有提出针对URL的长度限制,RFC 协议里面是这样描述的,HTTP协议并不对 URI 的长度做任何的限制,服务器端 必须能够处理任何它们所提供服务都能接受的 URI,并且能够处理无限长度的 URI,如果服务器不能处理过长的URI,那么应该返回414状态码。
可是虽然Http协议规定了,但是各个浏览器为了保护自己的运行资源空间,还是对URI设置了自己的长度限制。所以依赖URL传参的GET请求方式所传输的参数大小也会有一定的限制。
理论上讲,POST是没有大小限制的。HTTP协议规范也没有进行大小限制,起限制作用的是服务器的处理程序的处理能力,可以在服务器端配置最大http请求头长度的方式来实现,对应服务器脚本语言的配置中也有大小设置,如PHP服务器中,设置php.ini中的post_max_size参数也可以限制POST传参的数据大小,一般默认8M。
GET与POST的区别简单总结
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中
一个比较特别的区别,说的是GET与POST本质都是依靠TCP/IP,但GET请求方式每次只发送一个TCP包,POST请求方式每次会发送两个TCP包。