[ 优雅的面试 ] 网络协议小面试

这是我参与8月更文挑战的第5天,活动详情查看: 8月更文挑战nginx

微信公众号搜索【程序媛小庄】,Rest cannot be enjoyed by lazy people~面试

前情提要:绝顶聪明的面试官继续和小庄面试啦,你们一块儿来围观吧数据库

image.png

面试官大佬:(面带慈祥)小伙子来啦,来来来我们接着聊呀,今天来聊聊网络这块的东西~后端

我:(时刻准备着)您问~浏览器

面试官大佬:先说说HTTP协议get请求和post请求有啥区别呢?安全

我:get请求的主要特征是向服务器获取资源,在发送请求的过程当中,请求的参数会拼在URL后面。post请求通常用于表单提交,至关于把信息提交给服务器,等待服务器响应,post方式是把提交给后端的参数放在请求体中,对携带的参数长度没有要求。get请求在发送过程当中会产生一个TCP数据包,而post请求在发送过程当中会产生两个TCP数据包,对于get请求浏览器会把http headerdata一并发送出去,服务器响应状态码200返回客户端须要的资源;而对于post请求浏览器先发送header服务器响应状态码100表示continue,浏览器再发送data数据,服务器响应状态码200。服务器

面试官大佬:TCP协议知道吧,简单讲一下TCP协议的三次握手四次挥手?微信

我:TCP协议是传输层的协议,基于TCP协议的通讯客户端和服务端必须创建一个双向通讯的链接,链接创建以后就能够发送数据了,三次握手和四次挥手分别对应TCP的链接和释放过程。markdown

在创建TCP链接的时候,首先由客户端向服务端发送链接请求,服务端接收到请求后,会告诉客户端收到该请求并同时向客户端发送链接请求,而后客户端告诉服务端已经收到该请求,此时TCP链接就已经创建。cookie

在断开TCP链接的时候,由哪一方提出均可以,好比说客户端想要断开链接,客户端向服务端发送想要断开链接的请求,服务端收到该请求后会告诉客户端已经收到该请求,可是不会马上中断服务端与客户端的链接,由于此时可能客户端须要的数据还未传输完毕,当服务端向客户端传输的数据发送完毕后,服务端会向客户端发送断开链接的请求,客户端收到请求后会给服务端确认断开的信息,至此,TCP链接断开。

面试官大佬:粘包问题你知道吗?

我:粘包问题是TCP协议传输中的问题,TCP协议是面向流的协议,粘包问题的主要缘由是接收方不知道消息之间的界限,不知道一次性提取多少字节的数据形成的。

发送方和接收方创建通讯的底层仍是基于操做系统,因为操做系统有本身的机制规定何时向接收方发送数据,所以可能会出现同一个业务数据被分割成多个数据包或者多个业务数据被打包到同一个数据包发送。

因为问题的根源是接收方不知道消息之间的界限,所以解决粘包问题的方法就是围绕如何让发送端在发送数据前,把本身要发送的数据流总大小告知接收端,而后接收端能够起一个循环接收完全部数据。

面试官大佬:(小伙子能够呀)cookie和session了解吗?

我:HTTP协议有一个特色就是无状态,每次请求都是独立的,客户端的服务当次会话产生的数据不会被保留,可是随着互联网的发展,又须要保存状态,为了解决HTTP协议的无状态这一特性出现了cookie。cookie具体指的是保存在客户端浏览器一小段信息,当用户第一次登录时,服务端会产生随机串保存在客户端浏览器上,下次客户端浏览器再次访问服务端的时候会自动携带这个串,服务端就能够在这个串上获取用户的信息。

可是因为cookie是保存在客户端上的,有可能被拦截或者被窃取,存在很大的安全风险,就须要有一种新的技术,将用户信息保存在服务端上保证信息的安全性,就是session。 session是基于cookie的,session是存放在服务器上的随机串,当用户第一次登录的时候,服务器会产生一个随机串保存在客户端浏览器中,下次客户端访问服务器的时候会携带该随机串,服务端经过客户端携带的数据去服务器的数据库中进行比对,校验当前登录用户是否合法,可是若是有很是多的用户登录的话,就会产生很是多的数据,当用户登录时服务器查询数据库就会很是的慢,并且若是采用的分布式服务的话,就须要在每台服务器都配置相同的数据库,由于使用nginx转发的时候,并不知道当次请求会被转发到哪台服务器上,这样就会很是占用服务器资源,token就能够解决这个问题。 token也是基于cookie,token由三段组成,第一部分是头,第二部分是荷载,第三部分是签名,第一部分存放的是base64转码后的加密方式/公司信息等,第二部分荷载存放的是base64转码后的用户不敏感的信息好比用户名 过时时间等,第三部分是由前两部分组合转码以后再hash加密 获得的签名。 当用户第一次登录以后,服务端会返回这样的一个随机串给客户端浏览器保存,下次再次访问服务器想要进行其余操做的时候,服务端就会经过本身的解码方式获得前两部分,经过相同的加密方式获得随机串与客户端浏览器携带的串进行对比,判断用户信息是否正确。 使用token的好处就是服务器不须要存储用户的数据,能够节省服务器资源,每台服务器只须要保存对应的方法便可。

面试官大佬:666,你在说一下地址栏中输入URL按下回车发生了什么?

我:首先浏览器分析连接指向页面的URL,浏览器向DNS请求解析目标URL的IP地址,域名系统DNS解析出URL的IP地址后,浏览器与服务器创建TCP链接,链接创建以后浏览器会向目标服务器发起HTTP请求,请求数据包,若是目标服务器是一个简单的页面,就会直接返回。对于须要的重定向的页面,浏览器在获取了重定向响应后,找到重定向地址,重复第一步操做,而后浏览器从新发送请求,携带新的 URL,目标服务器返回数据。

面试官大佬:我这边面试基本就没什么问题了,等下一位面试官和你聊聊哦~

我:好嘞~

相关文章
相关标签/搜索