前言
找了好多家的公司去面试,但是一家公司的offer都没有拿到,自己也不知道问题出在哪里,在面试的过程也很轻松,可能回答的问题没有符合他们的的答案吧,还有我面试的公司都是招正常员工,没有招实习的,可能面试表现太差,或者自己能力真的太差了,不然他们也有可能破例。
以下是我面试的问题
GET和POST的差别在哪?
我觉得面试的时候回答这几点够了
- 最直观的就是语义上的区别,get用于获取数据,post用于提交数据。(可以具体举个例子,看别人微博的时候其实是用的就是GET,在给他微博评论的)
- get参数有长度限制(受限于url长度,具体的数值取决于浏览器和服务器的限制),而post无限制。
- 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。GET历史参数保留在浏览器历史中。POST参数不会保存在浏览器历史中。
首先我们先看看W3school的理解
1、GET后退按钮/刷新无害,POST数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
2、GET书签可收藏,POST为书签不可收藏。GET能被缓存,POST不能缓存 。
3、GET编码类型application/x-www-form-url,POST编码类型encodedapplication/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。
4、GET历史参数保留在浏览器历史中。POST参数不会保存在浏览器历史中。
5、GET对数据长度有限制,当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。POST无限制。GET只允许 ASCII 字符。POST没有限制。也允许二进制数据。
6、与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。
7、在发送密码或其他敏感信息时绝不要使用 GET !POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。GET的数据在 URL 中对所有人都是可见的。POST的数据不会显示在 URL 中。
再看看大神们对GTE和POST的理解
1、GET和POST还有一个重大区别,简单的说:GET产生一个TCP数据包;POST产生两个TCP数据包。
GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。
2、GET的语义是请求获取指定的资源。GET方法是安全、幂等、可缓存的(除非有 Cache-ControlHeader的约束),GET方法的报文主体没有任何语义。POST的语义是根据请求负荷(报文主体)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST不安全,不幂等,(大部分实现)不可缓存。为了针对其不可缓存性,有一系列的方法来进行优化,以后有机会再研究(FLAG已经立起)。还是举一个通俗栗子吧,在微博这个场景里,GET的语义会被用在「看看我的Timeline上最新的20条微博」这样的场景,而POST的语义会被用在「发微博、评论、点赞」这样的场景中。
3、我们通常在讨论 GET vs POST 的时候,实际上讨论的是 specification,而不是 implementation。什么是 specification?说白了就是相关的 RFC。implementation 则是所有实现了 specification 中描述的代码/库/产品,比如 curl,Python 的 requests 库,或者 Chrome。
- 本文作者: Littleki
- 本文链接: https:/littleki.gitee.io/2017/12/25/interview-questions/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!