发现很多前端小伙伴的简历当中都写有这么一句:了解http协议。其实大可不必,因为http是前端基础中的基础。这就相当于一位厨师的简历中写着:熟练使用炊具。
既然简历中出现这个知识点,那么紧随而来的便是面试官的提问:get与post方法有什么区别呢?
大部分面试者都只会从单词字面上回答:get是从服务器获取数据,而post是向服务器传送数据。
很显然上面的回答是无法让面试官信服的,下面是我对这两种请求方法的一些总结:
首先get和post都是http请求的方法。而http又是基于TCP/IP的应用层通信协议。所以本质上来说get和post请求是没有区别的,都是TCP链接。他们能做的事情也都是一样的(与服务器进行交互)。换言之:get能做的事,post也可以做,反之亦可!
http协议提供这两种方法,也是在特定的情况下区分应用:
1、参数位置:get请求的参数是放在url(query)里面的。而POST请求的参数是放置在请求体(content)里面的。当然post请求也是可以放置在url当中的。
2、浏览器缓存:get请求可以被浏览器缓存,而post请求不能被缓存。
3、参数长度:get请求参数由于是在url里面,所以会受到浏览器的长度限制,浏览器的不同长度的数值也不同,比如IE是2083字节。理论上讲,POST是没有大小限制的。因为HTTP协议规范没有进行大小限制。
4、参数安全性:同样是因为get的请求参数放置在url里,所以可见,再加上会被浏览器缓存,所以安全性比较差。post请求的参数是放置在请求体里,且不会被缓存,所以安全性相对就好一些。
5、浏览器访问:get请求可以通过浏览器直接访问,支持刷新和后退。post请求是不能被浏览器直接访问的,刷新后数据会重新传送。
6、RESTful架构:在该架构中get扮演获取数据的角色,而post扮演的是添加数据的角色。所以get对数据是无害的,不会对数据资源造成影响。而post使用不当,有可能对原有数据资源造成伤害。
网友评论