面试官问的这个面试题你回答对了吗?

这是一个接口测试&HTTP协议的基础知识,也是面试的时候面试官经常问的一个面试题


咋一看,哇哦,这个我会啊。

第一点:get把传参放入url中,post把传参放到body中

第二点:get的参数有限制长度的,post没有

第三点:get只有url编码,post有多种编码

第四点:get请求会被cache,post不会

第五点:get参数会在url显示,所以post安全

第六点:浏览器回退的时候post会多次提交

第七点:get只接受ASCII字符

第八点:get请求参数会被保存在浏览记录,post不会

        第九点:get产生的url地址会被BOOKMARK

        感觉是不是很全面,这个回答会叫面试官刮目相看的。


        可是面试官听完心里一想,也是个半罐子。

那么到底什么是正确的答案呢?叫我们来撕掉post和get的外衣来看看

我们先了解一下http协议,http是tcp/ip之上的应用通信协议,而get和post是http的两个请求方法,所以这俩货的底层也是tcp/ip。所以他俩做的事情完全一样,在技术上给post加上url参数,给get加上body一样没有问题。

        下面我就用一个场景来形容一下,TCP就像货车一样,TCP不像UDP,他从来不会发生丢包的少件的情况,HTTP就像交通规则,HTTP给汽车运输规定了各种规则,比如就产生了get,post,put,delete。HTTP就要求get汽车要把数据放在车顶上既是url里,post要把货物放在车厢里面。当然现实中可能get怕货物太多放不下会在车厢里藏一点,post也可以往车顶放上一丢丢。而这里看到TCP才是运输数据的,HTTP是个行为准则,TCP是get和post的实现依据。但是,我没看到了在get和post中确实存在一些差异,比如货物的运输量上有规定,这个时候,浏览器就出来了,浏览器就像不同的运输公司,他们要求各种大小车装载都有一定的风险控制,所以每个运输公司规定也不同,有些运输公司就可以默认get能够带一点货在车厢里,有的运输公司就不同意,就不帮你卸货。

        这下终于知道原理了,都是基于TCP的,并无差别,但是由于HTTP和浏览器的约束导致。

哈哈,以为就这样结束了吗?




 这里还有个get和post重大区别:

GET请求,浏览器把header和data一并发送出去,服务器响应200(返回数据);

        对于POST,浏览器先发header,服务器响应100 continue,再发送data,服务器响应200 ok(返回数据)。

 所以说get产生一个TCP数据包,post会有2个。所以说post在运输过程中会跑两趟,先把header放下,在回来装body在卸货。貌似效率上get高很多哦,但是这个效率在网络好的环境下差别基本可忽略,并且两次tcp在数据完整性上也有很大优势,并且在请求的语义上最好也别混用。

          好了,这样回答你的offer是不是就要到手了!


公主耗:shenjitest回复666领取最新一线大厂面试资料,面试题。以及整理最前沿的测试技术人员发展路线图和技能路线。

关注公主耗获取更多干货

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容