我被Hr领进了一个小黑屋,让我在这里等面试官,过来一会,一位穿着拖鞋的中年男子走了进来,看着他绝顶聪明的发际线,知道这确定是位大佬,我内心倍感到了压力;javascript
面试官果真不是盖的,刚坐下后就开始当即暴力输出了java
https://silently9527.cn
会发生什么?我:(这尼玛就是怕被搞事情因此没写精通,这也被搞。会发生什么,固然是展现出网页啊,大脑飞速旋转,脖子快断的时候,终于想到面试官可能想要问什么了)程序员
我:英俊潇洒的面试官,你好!面试
首先浏览器会去访问DNS服务器,查询到域名对应的ip地址是多少,而后浏览器再去访问这个ip地址;若是还要往底层在说的话,就会涉及到tcp/ip的分层,我仍是来画张图吧。浏览器
服务器返回资源的过程也是相似的方式安全
我:(还好前前大学女朋友没把我当年上课的笔记给扔掉,恰好昨晚找回来温习了一下,温故而知新!只是笔记而已,你们别想歪了!)
插图服务器
我:TCP/IP协议族分为4层:应用层、传输层、网络层、数据链路层cookie
我:在这个分层中,每次网络请求都会按照分层的顺序与对方进行通讯,发送端从应用层往下走,接收端从数据链路层往上走;以Http来举例的话:网络
在发送方每通过一层,就会被加上该层的首部信息,当接收方接受到数据后,在每个层会去掉对应的首部信息并发
我:TCP协议采用的三次握手策略
我:假如说是两次握手,若是客户端本身处理异常或者是服务器返回的ack消息丢失,那么客服端会认为链接创建失败,再次从新发送请求创建链接,可是服务端却无感知,觉得链接以及正常创建,致使服务器创建无用的链接,浪费资源
假如四次握手,若是三次已经足够,那就不须要四次了。若是四次的话,最后一个ACK丢失,那么又会出现两次握手的问题。
我:
我:由于当服务器收到客户端断开链接的请求后,服务器不能当即断开链接,由于可能服务器端还有数据未发送完成,因此只能回复一个ACK表示我已收到消息;等服务器端数据发送完成以后再发送一个FIN但愿端开链接的消息,客户端回复ACK以后,就能够安全断开了
我:自己HTTP协议是不保存状态的,自身不对请求和响应直接的通讯状态进行保存,因此是无状态的协议。由于在有些场景下咱们须要保存用户的登陆信息,因此引入了cookie来管理状态。客户端第一次请求服务器的时候,服务器会生成cookie添加在响应头里面,之后客户端的每次请求都会带上这个cookie信息。
我:
Set-Cookie
字段向客户端设置Cookie,属性:
我:
我:(毛线啊,我只是个来面试Java的初级程序员,干吗要反复拿Http来摩擦我呢?!不过没事,我皮的很,这道题我又会)
我:在HTTP协议的早期,每进行一次HTTP通讯就要断开一次tcp链接,当时传输的内容少还能接受,如今每一个网页通常的会包含大量的图片,每次请求都会形成TCP链接的链接和断开,增长通讯的开销。
为了解决这个问题因此想出了持久链接的方法,也叫作keep-alive,只要一端没有提出断开链接就会一直保持TCP链接的状态。持久化链接使的客户端能够同时并发发送多个请求,不用一个接着一个的等待响应。
我:HTTP请求头有个Range字段;咱们下载文件的时候若是遇到网络中断,若是重头开始下载会浪费时间,因此咱们能够从上一次中断处继续开始下载;具体的操做:
Range: bytes=5001-10000
或者指定5001之后的全部数据
Range: bytes=5001-
响应返回的状态码是206
我:(面试官我简历上忘记写了,我曾经是学霸,记忆力好,背书没输过)
我:HTTP的状态码主要分为了四类:
常见的状态码有: 200(请求正常处理完成)、204(请求处理成功,可是没有资源返回)、206(表示客户端进行了范围请求,响应报文中包含了Content-Range)、301(永久性重定向,请求的资源以及被分配到了新的地址)、302(临时重定向,但愿用户而且请求新地址)、400(客户端请求报文出现错误,一般是参数错误)、401(客户端未认证错误)、403(没有权限访问该资源)、404(未找到请求的资源)、405(不支持该请求方法,若是服务器支持GET,客户端用POST请求就会出现这个错误码)、500(服务器异常)、503(服务器不能提供服务)
我:(这我都能记住,是否是的给我点个赞)(已疯狂暗示兄弟们点赞,不要白嫖哦)
我:报文的类型分为了请求报文和响应报文两种;
请求报文包含三部分:
我:Http的问题
我:首先须要说到两种加密机制
因为这两个加密的特别,HTTPS采用的时候混合加密机制,在交换密钥的阶段使用的是非对称加密,在创建通讯交换报文阶段采用的是对称加密
以访问 https://silently9527.cn 举例
我:虽然https是能够加密的,可是由于请求仍是能够被拦截,如何让客户端知道返回给本身的公钥是真实服务器给的而不是***者给的;这就须要验证证书的合法性,因此须要引入第三方认证机构。一般https的证书须要到第三方机构去申请购买,若是是咱们本身生成的https证书浏览器验证不过会弹出警告。
我:浏览器在向证书认证中心验证证书的过程使用的也是非对称加密,这里想要让公钥可以安全的转交给客户端,是很是困难的,因此浏览器的开发商一般会在浏览器内部植入经常使用认证机构的公开密钥
能撑到如今,你本身都忍不住本身给本身点个赞了!(再次暗示点赞)
本篇面试故事纯属虚构,请你们不要当真,玩笑归玩笑,莫拿面试开玩笑。
文中或许会存在或多或少的不足、错误之处,有建议或者意见也很是欢迎你们在评论交流。
最后,白嫖很差,创做不易,但愿朋友们能够点赞评论关注三连,由于这些就是我分享的所有动力来源