GET与POST区别

        GET与POST的区别这个问题因为在很多面试题都出现过,所以上网搜索答案,可以发现一大堆,大多数答案看起来都大同小异,但没有一个标准的答案,都是各自对GET与POST的理解,因此,我也根据自己的理解,说明GET与POST的异同。

        GET与POST都是HTTP协议(HTTP协议详解)中的请求方式,而HTTP是基于TCP/IP协议进行数据传输,所以从本质上这两种请求方式并无区别,但是,如果HTTP协议中一个请求方式可以完美完成任务,那我想就没有这个问题存在了,但既然会设计出来不同的方式,那肯定是对应要解决一些问题。以下展开。

1.  安全问题

网上的答案都有一条区别说明: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个字符。

理论上讲,POST是没有大小限制的。HTTP协议规范也没有进行大小限制,起限制作用的是服务器的处理程序的处理能力,可以在服务器端配置最大http请求头长度的方式来实现,对应服务器脚本语言的配置中也有大小设置,如PHP服务器中,设置php.ini中的post_max_size参数也可以限制POST传参的数据大小,一般默认8M。

——————————————————————————————————————————————————

写完以上内容后,发现只解决了两个问题,内容也太少了吧?疑问

果断再搜索了几篇文章,有一篇文章写得挺有意思 --> GET和POST两种基本请求方法的区别

贴一下这个博主通过3wschool总结的几条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包

平时的网速都比较好,所以也没注意到这个区别,文中说Firefox浏览器POST方式只发送一个TCP包,没有具体测试,但可以留意一下,下次再专门去研究一下这个。


OK,完毕!欢迎评论交流!

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值