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

这是一个接口测试&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是不是就要到手了!

在这里插入图片描述
免费海量学习资料+面试资料+测试学习视频加群:646294456(进群暗号:CSDN666)

猜你喜欢

转载自blog.csdn.net/waitingwww/article/details/121389103
今日推荐