阅读 5508

面试 | 你要懂得http相关(片尾附内推)

前言

前端在面试过程中,也会遇到网络层面的一些问题,这些有的可能会在平时业务中用到,有的可能就是单纯造火箭。下面我汇总了一些我在面试中遇到的,以及我复习的一些面试相关的东西。

http缓存(高频考点,送分题)

http缓存基本面试中都会考到,主要记忆点为强缓存、协商缓存。

加分点:

强缓存:from memory cache,from disk cache什么区别?Expires和Cache-Control的区别

协商缓存:两个标志位的区别。

参考答案

http缓存分为强缓存和协商缓存。强缓存就是浏览器缓存,资源直接从浏览器中获取。协商缓存就是资源会从cdn去获取。

强缓存的判断标志有两个,Expires这个标识实在http1.0之前用的,表示的是过期时间,但是客户端和服务端时间存在不同步问题,所以在http1.1之后加入了Cache-Control,这个表示的是距离请求发出时的时间,是一个相对时间比较精确。

强缓存即为浏览器缓存,分为两类from memory cache,from disk cache,返回的状态码都为200.两者的区别是from memory cache是从内存中取。from disk cache是从硬盘中取。如果是刷新当前页面,且内存环境比较充裕的情况下,返回from memory cache。但是如果是返回上一个页面或者当前内存环境不充裕的情况下,返回的是from disk cache。

协商缓存的判断标识:Last-Modified和ETag。ETag是文件每次生成的hash,是唯一的准确性高,但是比较繁琐以及消耗性能。而Last-Modified是以秒级为单位的文件生成时间,比较不精确。因为1s中文件可能多次生成。判断的优先标准是ETag。其次是Last-Modified。

http缓存的判断过程:先判断Cache-Control的值,这里不细讲,比如max-age=300,那么在五分钟之内都会触发强缓存。如果已经过了5分钟之后,会进入协商缓存阶段。发出去的http请求中会带有两个标示位, If-Modified-Since(来自第一次请求返回头中的Last-Modified)和If-None-Match(来自第一次请求返回头中的ETag)。两个标示位的区别我在上面已经说了,根据标示位判断文件是否更新,如果更新返回状态码200以及资源。如果没有更新,只返回状态码304

TCP握手过程和分手过程

参考答案

TCP握手过程:客户端发送ACK包给服务端。当服务端接收到ACK包之后,向客户端发送ACK+SYN包。客户端接收到ACK+SYN包之后,向服务端返回SYN包。

三次握手是识别客户端发送和接收能力的最小安全次数。

四次挥手过程:

1、客户端像服务端发送fin包,之后客户端不能发送数据,只能读取数据。

2、服务端收到fin包之后,像客户端发送ACK包,此时服务端只能发送数据,不能接收数据。

3、当数据发送完毕之后,服务端会发送fin包给客户端。此时服务端不能读取数据也不能接收数据

4、当客户端收到fin包时,将发送ack包给服务端,自己等待足够多的时间,便进入closed状态。服务端接收到ack包的时候,也会进入到closed状态。

为什么挥手过程要4次?

因为TCP是双工通道,服务端和客户端均可以发送和接收数据。两边是同时运转的。

https的握手过程

参考答案

https的握手过程分为两步:证书校验和数据传输

1、客户端访问web服务器,服务器返回数字签名(公钥,证书信息,服务端信息,hash值)。

2、客户端通过证书机构颁发的私钥对数字签名进行解密。校验证书信息和服务端信息之后,生成随机数,用公钥进行加密。

3、数据返回给服务端之后,服务端使用相应的私钥进行解密,得到随机数。

4、之后服务端与客户端就通过随机数的对称加密方式进行交互。

HTTPS 握手过程中,客户端如何验证证书的合法性

参考答案

拿到服务端给的数字签名之后,客户端会根据机构颁发的私钥对数字签名的东西进行解密。解密出来,内部会含有服务端信息和证书的信息。

证书信息需要校验以下几方面:

1、颁发证书的第三方机构(CA)是否受客户端的信任。

2、对比系统时间校验证书是否在有效期。

3、通过CRL或者OCSP的方式校验证书是否被吊销。

4、通过校验对方是否存在证书的私钥,判断证书的网站域名是否与证书颁发的域名一致。

https的对称加密和非对称加密了解多少

参考答案

对称加密的加解密钥匙是同一个,密钥在传输过程中容易被第三方截取,安全性相对较低。

非对称加密一共有一对钥匙,分为公钥和私钥。公钥进行加密过程,私钥用于解密过程。性能上相对于对称加密来的低。

非对称加密和对称加密在https中的应用:由于性能原因,https只有在第一次建立的时候会使用非对称加密,之后的过程都是走随机数的对称加密方式。

https的中间人攻击

参考答案

中间人攻击就是在没有ca证书之前,公钥在传输过程中也可以被截获。

中间人截获公钥之后,将公钥替换成自己的公钥。

然后客户端收到伪造公钥之后,用其进行加密操作之后,返回给服务端。

在返回过程中,中间者再次将数据截获,用私钥进行解密。

解密完成之后,将数据在用真公钥进行加密,返回给服务端。

所有数据相当于在明文传输。

http2和http1.1之间的区别

参考答案

主要区别在以下4个点:

1、二进制传输:http2.0的数据是以二进制的形式传输的,最小单位是帧,多个帧组成数据流的形式传输。而http1.1以下是以明文文本格式传输的。明显二进制传输方式更加高效

2、头部压缩:http1.1的时候在每次请求都会携带大量重复头部信息。但是在http2.0的时候,只需要发送改变的头部信息就行。

3、服务器推送:服务端可以在发送html的时候主动推送其他资源,不需要等浏览器在请求到相应位置的时候再去请求。

4、多路复用,详细可以看下面一个问题

简单讲解一下http2的多路复用

参考答案

http/1每次请求都会建立一次tcp链接,也就是我们说的三次握手四次挥手。这个过程是非常耗时的,尽管可以开启keep-alive去避免多次连接的问题。但是还是存在一下两个问题:

1、串行的文件传输方式。文件传输的过程是,当a文件传输时,b文件只能等待。而a文件在传输过程中,需要经历连接服务,服务器处理文件,以及断开服务等三个过程。假设每个过程耗时1s,那么a文件耗时就是3s,那么b文件传输完成就是6s

2、连接数过多。当客户端发起多个请求时,浏览器会对请求的并发数做一个限制,chrome的最大并发数是6个,那么第7个请求的时候就需要等前面的请求完成之后,才能拿到相应的结果。

而http2之后,改成了二进制传输,也就多了帧和流的概念。

数据在一个tcp连接中按流的形式传输,帧就是其中最小的传输单位,而帧中带有标示位,可以识别是从哪个流中来的,到服务端之后,服务端会将帧数据重新整合成流,也就是所说的多路复用。

http的请求报文由什么组成

参考答案

http报文分为请求报文和相应报文。他们分别分为4个部分:

1、请求行/响应行:请求行由方法,URL,http版本组成。比如:GET /index.html HTTP/1.1。响应行由http版本和状态码组成,比如:HTTP/1.1 200ok

2、请求头部/响应头部:头部由一些key:value的字段组成

3、空行:作用主要是用来分割头部和实体。

4、请求体/响应体:请求体主要携带post时候的一些参数。响应体主要携带服务端返回的一些数据。

http的状态码有哪些

这里就介绍一些常用的状态码

参考答案

1XX:临时响应

2XX:成功

  • 200 OK:表示请求被服务端处理并正确返回
  • 206 Partial Content,进行范围请求。

3XX:重定向

  • 301 moved permanently,永久性重定向,表示资源已被分配了新的 URL
  • 302 found,临时性重定向,表示资源临时被分配了新的 URL
  • 304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况

4XX:客户端错误

  • 400 bad request,请求报文存在语法错误
  • 403 forbidden,表示对请求资源的访问被服务器拒绝
  • 404 not found,表示在服务器上没有找到请求的资源

5XX:服务端错误

  • 500 internal sever error,表示服务器端在处理请求时发生了错误

http的常用字段有哪些

参考答案 通用字段:
  • Cache-Control 控制缓存
  • Connection 连接管理、逐条首部
  • Transfor-Encoding 报文主体的传输编码格式

请求字段:

  • Accept 客户端或者代理能够处理的媒体类型
  • If-None-Match 比较实体标记(ETage)
  • If-Modified-Since 比较资源更新时间(Last-Modified)
  • Range 实体的字节范围请求
  • Authorization web的认证信息
  • Host 请求资源所在服务器
  • User-Agent 客户端程序信息

响应字段:

  • Location 令客户端重定向的URI
  • ETag 能够表示资源唯一资源的字符串
  • Server 服务器的信息

内推

疫情当下,唯有进入大公司,应届生才能有很好的保障。小公司如果活不下去,裁员或者无法转正,被迫社招会很被动。

笔者就职于阿里零售通。想要内推的同学,可以发邮箱1445509994@qq.com。海量HC!!!也可以加q群:912253914。空闲时间帮改简历哦。