美文网首页WEB前端面试
关于面试被问到post和get的区别???

关于面试被问到post和get的区别???

作者: 小姑凉喜欢无脸男 | 来源:发表于2018-01-25 11:26 被阅读20次

    当第一次面试的时候被问到说一说get和post有什么区别。当时就说了一大堆很普遍很基础的答案,什么post比get安全,get比post传的少什么的。然而,面试官问,还有呢?
    好家伙,面试完回去百度,整理了网上一堆的get和post的区别。整理如下:

    1. 从http标准来看,get比post安全,这里的安全是针对服务器而言的,get用于获取数据,不会引起数据的变化,并且是安全和幂等的。而post是有可能引起数据的变化。
    2. 从应用角度来看,get参数是放在URL后面(通过URL传递),参数直接暴露在URL上,所以不能用来传递敏感信息,而post提交的数据会放置在Request body中,get请求会被浏览器主动缓存post不会,除非手动设置。从这里看,post安全性比get高。GET请求只能进行url编码,而POST支持多种编码方式。 GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。GET在浏览器回退时是无害的,而POST会再次提交请求。 GET产生的URL地址可以被Bookmark,而POST不可以。对参数的数据类型,GET只接受ASCII字符,而POST没有限制。Get方式的提交顶多是1024字节,理论上post没有限制,可以传较大量的数据。Get一般是获取数据,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参数,技术上是完全行的通的。

    那所谓的区别呢?稍微总结了下(以下参考了在今日头条看到的一篇文章)。
    运输快递需要车辆,而TCP就像车辆,但如果车辆全部按自己的想法走,交通就会瘫痪,所以交通规则HTTP诞生了。HTTP规定了运输方式:get、post、head、options、put等。当执行get请求时,车上贴get标签,货物放在上层运输。如果是post请求,车上贴post标签,货物放在下层运输。当然,get方式也可以把货物放在下层,但是这样是算get还是post呢?所以,HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。

    而关于传递的参数大小问题,是这样的。
    过大的数据量会增加运输成本,超出的部分,概不处理,那还不如乖按照规定走。所以,浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。如果你用GET服务,在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器直接忽略,所以,虽然GET可以带request body,也不能保证一定能被接收到哦。

    GET和POST还有一个重大区别,简单的说:
    GET产生一个TCP数据包;POST产生两个TCP数据包。
    对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
    而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)

    好吧,至于这个答案。面试有待验证。
    至于面试,老老实实回答还是有必要的,暂时为以下答案:

    1. get在浏览器回退时是无害的,而post会再次请求
    2. get产生的url地址可以被收藏,而post不会
    3. get请求会被浏览器主动缓存,而post不会,除非手动设置
    4. get请求只能进行url编码,而post支持多种编码方式
    5. get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留
    6. get 请求在url中传送的参数有长度限制,而post没有
    7. 对参数的数据类型,get只接受ascll字符,而post没有限制
    8. get比post更安全,因为参数直接暴露在url上,所以不能用来传递敏感信息
    9. get参数通过url传递,poet放在request body中
      (记不住全部的,重点回答出1,2,5,6,9这几点即可)

    相关文章

      网友评论

        本文标题:关于面试被问到post和get的区别???

        本文链接:https://www.haomeiwen.com/subject/hinmaxtx.html