每日八股文6.12
每日八股-6.12计算机网络1.当我们在浏览器中输入一个 URL 并按下回车后到页面最终显示出来这中间都发生了哪些关键步骤2.请简述一下 JWTJSON Web Tokens的原理和校验机制3.DNS 是如何进行域名解析的它属于 OSI 哪一层的协议4.HTTP 协议有哪些常见的状态码你能说出一些你熟悉的吗5.HTTP 协议是长连接还是短连接呢长连接的好处了解吗6.HTTP/1.0 和 HTTP/1.1 之间有哪些主要的区别7.Cookie、Session 和 Token 这三种技术有什么异同之处它们分别适用于哪些场景8.什么是跨域在什么情况下会发生跨域请求计算机网络1.当我们在浏览器中输入一个 URL 并按下回车后到页面最终显示出来这中间都发生了哪些关键步骤首先我们需要解析浏览器客户端的URL因为网络传输需要ip地址一个正确的URL包括协议比如httphttpsftp域名比如www.baidu.com端口对于http来说默认端口是80对于https来说默认端口是443路径比如说我们像访问百度贴吧里面某一个具体的帖子那么后面一定会跟随一个具体的路径。解析出这些之后我们需要获得请求的ip地址首先我们需要查看浏览器的缓存是否有这个ip地址如果有直接返回如果没有我们接下来去查操作系统的缓存比如hosts看有没有ip地址如果有直接返回如果没有我们就要用到域名解析协议也就是DNS本地域名服务器会帮我们去递归的查询ip地址。首先去查根域名服务器然后去查顶级域名服务器最后去查权威域名服务器这样我们就得到了ip地址。得到了ip地址之后我们就可以与服务器建立TCP连接如果使用的协议是http的话那么我们用三次握手来建立TCP连接具体细节是首先客户端发送一个SYN包到服务器表示我要开始与你建立连接了然后服务器返回一个SYN ACK包表示服务器收到了来自客户端的建立连接请求之后客户端再发送一个ACK包表示收到了来自服务器的SYN ACK包可以正式开始传输数据了。如果使用的协议是https的话那么我们用四次握手来建立安全的TCP连接。在完成了建立连接后浏览器将之前的http报文逐层的向下传输并封装该层的特定信息比如说到传输层就要封装上源端口和目的端口到网络层就要封装上源ip和目的ip到数据链路层就要封装上源mac地址和目的mac地址另外在数据链路层我们会使用到ARP协议来广播请求以此来知道下一跳的目标mac地址。就这样我们经过了无数个路由器最终到达了目的服务器服务器通过与刚才相反的路径返回我们请求的资源在浏览器web页面上渲染出来呈现给用户。2.请简述一下 JWTJSON Web Tokens的原理和校验机制JWT的全称是JSON WEB TOKENS是一种基于Json的开放标准一个JWT由三个部分构成头部header头部包括两个字段第一个字段是alg也就是指明我们的加密算法分为对称算法和非对称算法两种对称算法用到的一般是HS256非对称算法一般用到的是RS256第二个字段是typ这是一个固定值JWT用来表示他是一个jwt token。头部会使用base64 url来进行编码并进行加密负载payload负载主要存储的是实际信息包括用户登录信息过期时间等等他也需要用base64 url来进行编码但是他不会加密所以说我们不能将任何敏感的数据存放在负载里。签名signature签名是服务器用来验证客户端传来的jwt的完整性和真实性它等于alg解密后的头部“.”解密后的负载secret校验机制是这样的客户端发来一个jwt token服务器端用头部中的算法计算base64 url解密后的头部加上base64 url解密后的负载加上服务器端的密钥看是否用jwt token中的签名一致如果一致说明没有被篡改可以进行后续的操作。补充Refresh Token为什么需要Refresh TokenAccess Token即jwt在客户端请求服务器时会频繁的暴露在网络传输中极有可能会被窃取如果说jwt token设置的过期时间很长那么对用户会造成损失如果jwt token设置的过期时间很短比如说15分钟那么用户在使用服务的时候每隔十五分钟就需要重新输入一次密码这对于用户的体验感是极差的所以说我们在Access Token的基础上引入了Refresh Token它解决了上面两个问题首先Access Token通常存储在内存中而Refresh Token一般存在cookie上这保证了安全性另外最重要的是我们引入Refresh Token来刷新Access Token的这一过程对用户是无感的也就是用户不会察觉到。Access Token (访问令牌)就像是你酒店房间的房卡。它的有效期很短比如 15 分钟到 1 小时你每次进房间访问受保护的 API都需要出示它。它直接暴露给各种服务风险较高。Refresh Token (刷新令牌)就像是你办理入住时拿到的入住凭证。它的有效期很长比如 7 天或 30 天你平时都把它妥善保管起来不会轻易示人。它的唯一作用就是当你的房卡Access Token过期失效时你可以拿着这个凭证去前台特定的刷新接口换一张新的房卡。所以Refresh Token 本身并不用于访问业务 API它唯一的作用就是用来获取新的 Access Token。3.DNS 是如何进行域名解析的它属于 OSI 哪一层的协议DNS属于应用层的协议。当我们在浏览器输入一个url后浏览器首先检查自己的缓存看有无对应的ip地址有就直接返回没有就去检查操作系统的缓存如果还没有本地域名服务器先检查自己的缓存如果没有就去递归的搜寻ip首先去根域名服务器根域名服务器会告诉本地域名服务器去哪个顶级域名服务器找然后去顶级域名服务器顶级域名服务器会告诉本地域名服务器去哪个权威域名服务器找最后到权威域名服务器找到需要的ip地址并逐层向上返回。这时本地域名服务器会将ip缓存下来以便于下一次访问同样的url浏览器和操作系统也可能将ip缓存下来。4.HTTP 协议有哪些常见的状态码你能说出一些你熟悉的吗2开头的状态码表示服务器已成功接收到请求常见的有200 OK3开头的状态码表示客户端需要进一步的操作才能访问资源通常是重定向常见的比如301 Moved permanently表示永久重定向4开头的状态码表示客户端错误常见的比如说403 forbidden表示服务器禁止访问该资源404 not found表示服务器找不到该资源5开头的状态码表示服务器错误常见的比如说500 internal server error表示服务器内部错误502 bad gateway表示服务器作为网关时从后端服务器收到了无效响应5.HTTP 协议是长连接还是短连接呢长连接的好处了解吗这个要区分http/1.0和http/1.1如果是http/1.0默认的就是短链接也就是说客户端完成了一次对服务器的请求该连接就会关闭除非显式在请求头中指定connection keep alive。如果是http/1.1默认的就是长连接除非显式指定connection close长连接的好处就是客户端要多次访问同一url时不需要多次的建立连接只需在第一次建立连接就可以没有了多次建立和关闭连接的开销提升了通信的效率和性能。6.HTTP/1.0 和 HTTP/1.1 之间有哪些主要的区别最关键的一点1.1默认长连接1.0默认短链接长连接可以减少频繁创建和关闭TCP连接的开销提升网络通信性能和效率1.1支持管道化请求传输1.0只能等待一个请求返回响应之后再传输下一个请求但1.1可以在一个连接上发送多个请求但需要保证返回响应的顺序这会造成队头阻塞队头阻塞比如说连接上有三个请求第一个请求要访问一个很大的数据文件预估耗时3秒第二个请求只需要访问一段文字预计耗时0.01秒第三个请求只要访问一张图片预计耗时0.01秒因为要保证返回响应的顺序性即使我的后续请求只需要很短时间完成那么也需要等待前面的请求先返回响应这就是队头阻塞1.1引入了更多的缓存控制比如Entity TagIf-Match等等1.1针对带宽进行了优化允许只访问服务器的部分资源这可以保证用户在下载大文件的断点续传功能1.1支持虚拟主机通过引入host头部字段可以明确指定要访问的域名1.0的一大缺陷就是服务器只知道要访问的ip地址但不知道具体的域名是什么如果说一台服务器上托管了多个网站服务器就无法区分请求是发给哪个网站的。7.Cookie、Session 和 Token 这三种技术有什么异同之处它们分别适用于哪些场景Cookie存储在客户端浏览器它主要用来存储一些非敏感的数据比如说用户偏好等安全性低默认不支持跨域Session存储在服务器端服务器会为每一个发来请求的客户维护一个唯一的session ID并通过cookie发给客户端安全性较高跨域的支持有限可能需要一些特殊方法实现跨域Token存储在客户端它包含客户的一些登录信息和权限信息服务器可以通过验证token来进行用户的登录和授权token会使用算法加密安全性高且支持跨域从适用场景来看Cookie适用于存储一些临时数据做简单的状态管理Session适用于传统的web应用需要保护用户的敏感信息Token则适用于现代的web应用和Restful Api尤其是需要跨域和无状态服务的场景。8.什么是跨域在什么情况下会发生跨域请求跨域指的是在浏览器环境下去访问不同源的资源这里的源包括域名协议端口。以下场景都会发生跨域请求当前协议是http要去访问https下的资源当前域名是example.com要去访问example2.com的资源当前端口是默认端口80要去访问端口8080的资源一个现实场景中的例子就是现在的前后端分离项目前端应用部署在一个域名之下而后端的api服务部署在另一个域名之下当前端通过fetch发送请求比如说获取用户列表或者提交表单数据这时就发生了跨域请求最常用的解决方案就是Nginx 反向代理他的核心逻辑是同源策略只是浏览器的规矩服务器和服务器之间通信是没有跨域限制的具体来说就是1.前端a.com把请求发给同域名的 Nginx 服务器a.com/api。浏览器一看是同源开绿灯。2.Nginx 拿到请求后在后台悄悄把它转发给真正的后端服务器b.com。3.后端处理完把结果给 NginxNginx 再给前端。完美绕过浏览器限制。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2411480.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!