上来就直接说get是用来拿数据的,post是用来给后端传数据的?
面试官直摇头!
你说: 二者没有本质区别! 面试官虎躯一震,愿闻其详!
get和post都是HTTP的请求方式,二者都属于TCP/IP(传输控制/网络)协议,二者没有本质区别。
以前说get的参数挂在url上面,post的参数放在request body中。其实呐,交换二者的传参方式也是可行的。
那为啥实际就不行呢?
1. HTTP为了区别二者,规定get传递参数在url上面,post把参数放在request body中,这也导致get比post更不安全,因为,参数暴露。
2. 因为不同的浏览器和服务器为了减少数据量的负担,大多限制了url长度在2kb左右,忽略get请求的request body 中携带的数据。
脱离浏览器环境,在node环境中请求,二者就可以随便来!!!
另外的不同点,get请求会把http header和data一并发送出去,服务器响应200; 而post是先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200,故:get产生一个TCP数据包,post产生两个TCP数据包,在网络环境差的情况下,两次验证的完整性更有优势。
其他的不同点:
1. get在浏览器回退无害,post会再次请求
2. get的url可以加入标签,post不行
3. get会被浏览器主动cache(缓存),post需要手动设置
4. get只能url编码,post花样多
5. get参数会被记录在浏览器历史记录,post不会保留
6. get只传递ASCII字符,post可携带各种