正确认清get与post请求的区别

什么时候用get,什么时候用post 作为写前端这么久这两个的用法想必在熟悉不过了,但是却没有认真的去想过这两个到底有什么区别;会用那可还不行,通常在面试中可没有机会让你实际操作。人与人交流无形中透露着装逼的气息并不是实操,而是理论知识,所以懂实操也要会理论方可装逼于无形之中,今天就记录一下getpost的区别。


postget只不过都是HTTP与服务器交互的方式,那这两者到底有什么区别呢?

GET 把参数放url上,通过url传递

POST 把参数放在request body体内传递

GET 请求的url长度受限制,而POST理论上是无限的。

GET 产生一个TCP数据包,只请求一次即header和data一并传输,而POST是两个TCP数据包先进行header传输得到响应100 continue时才继续传输data。

GET 请求的url长度受限制,而POST理论上是无限的。

GET 请求会被浏览器cache缓存,而POST不会。

GET 只能url编码,并且只接受ASCII的数据类型,而POST支持多种编码并且数据类型不限。


这些都是官方上的区别,但仅仅只是背熟上面的区别是没用的,倒背如流有何用?背书谁不会。要理解深层原理。

GET和POST是HTTP协议中的两种发送请求的方法。那HTTP有是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议,HTTP的底层是TCP/IP。所以GET和POST的底层肯定也是TCP/IP了,那么GET/POST固然就都是TCP链接,GET和POST能做的事是一样的。给GET加上request body,给POST带上url参数,技术上完全OK的。


TCP来传数据,不会出现丢件少件的情况,但TCP数据有很多,为了分清楚这些TCP数据包,并规定其优先的级别,就有了HTTP规则。


HTTP给TCP数据包规定了好几个服务的类型,有GET, POST, PUT, DELETE等等,只不过是服务的类型,在GET上加request body,给POST带上url参数是完全可的,就像红灯不能过马路,但你还是可以闯红灯,只不过是一个规范,并不代表不能这么做。所以TCP才基本而post和get只不过是一种规范的服务类型。


那么既然TCP才是实现的基本,关于里面参数的大小又是从哪里来的呢?

其实这是浏览器和服务器规定的大小,如果数据太大对浏览器和服务器会造成很大的负担,一般的浏览器url长度是2K字节,服务器处理的url是64K,超出的部分直接就丢掉了。所以在GET上加request body,给POST带上url参数 可以是可以,但会不会被接收那就不一定咯。那么最后post和get其实是没有区别的,只是HTTP的规定和浏览器/服务器的限制,这才导致它们在应用过程中体现出一些不同


但是 GET 产生一个TCP数据包,只请求一次即header和data一并传输,而POST是两个TCP数据包先进行header传输得到响应100 continue时才继续传输data。看似get效率更高,为什么不用GET来替换POST来优化网站性能呢?


1. GET与POST都有自己的语义,不能随便混用。

2. 据研究,在网络环境好的情况下,发送一次和两次其实是可以无视的。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

3. 也并不是所有浏览器在POST中都会发送两次数据包,Firefox就只发送一次。

    总结:GET和POST没有区别,只是浏览器和服务器的限制,才体现出了一点不同。但要说区别也有点区别,get请求发送一次包,post请求发送两次包。

分享

下一篇:没有了

发表评论

提交评论

清空信息
关闭评论

评论列表