Get和Post的真正区别

网上关于get和post的区别大多相同,不过那些并不是真正的区别,只是一种约定一种规范,至于你尊不遵守,这个就要看自己了。

辟谣:
1:常说区别get用于获取信息,post用于提交数据改变目标服务器的信息,这只是一种约定,并不是区别。而浏览器正是遵守这种约定,get请求它一般是没有副作用的,所以get请求可以被浏览器缓存起来,试想如果get一下用户就下单了,返回订单已受理,这是不能接受的,这就是有副作用。所以我们常使用的书签中保存一定是get请求,不会是post请求。而post是有副作用的。 相信大家肯定遇到过这种情况,这种情况就是因为重新尝试执行POST请求,浏览器也会弹一个框提示下这个刷新可能会有副作用,询问要不要继续。
在这里插入图片描述

2.常说get中的URL可以携带参数,不安全,post中参数在body中,是安全的,这种说法其实是错误的。从攻击的角度来看,无论是GET还是POST都不够安全,因为HTTP本身是明文协议。每个HTTP请求和返回的每个byte都会在网络上明文传播,不管是url,header还是body。这完全不是一个“是否容易在浏览器地址栏上看到“的问题。而要保证安全,必须做从客户端到服务器的端端加密。业界的通行做法就是https。

3.常说get中请求会有数据长度限制而这里的限制指的是”URL的长度限制“。
不论是GET和POST都可以使用URL传递数据,所以我们常说的“GET数据有长度限制“其实是指”URL的长度限制“。

HTTP协议本身对URL长度并没有做任何规定。实际的限制是由客户端/浏览器以及服务器端决定的。
不同的浏览器对url长度限制不同

最后回到http本身,它本身并没有做出上述所说的规定,只是浏览器之间传输数据的约定罢了,当你自己想模拟一个http请求,只需要遵守一下HTTP请求的格式

HTTP/1.1\r\n
: \r\n
: \r\n

: \r\n
\r\n

  1. 请求行(请求方式、请求路径、协议版本)
  2. 请求头(客户端的一些信息)
  3. 请求体(请求数据)get请求可以没有body

只需要遵守以上三个条件就可以模拟发送一个简单的。从http请求从协议本身看,并没有什么限制说GET一定不能没有body,POST就一定不能把参放到的querystring上。因此其实可以更加自由的去利用格式。比如Elastic Search的_search api就用了带body的GET;也可以自己开发接口让POST一半的参数放在url的querystring里,另外一半放body里;你甚至还可以让所有的参数都放Header里——可以做各种各样的定制,只要请求的客户端和服务器端能够约定好。

最后引用大佬的一句话

希望读者不要死记硬背GET和POST的区别,而是能从更广的层面去看待和思考这个问题。最后,协议都是人定的。只要客户端和服务器能彼此认同,就能工作。在常规的情况下,用符合规范的方式去实现系统可以减少很多工作量——大家都约定好了,就不要折腾了。但是,总会有一些情况用常规规范不合适,不满足需求。这时思路也不能被规范限制死,更不要死抠RFC。这些规范也许不能处理你遇到的特殊问题。

参考作者:大宽宽
链接:https://www.zhihu.com/question/28586791/answer/767316172
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值