前端在面试过程当中,也会遇到网络层面的一些问题,这些有的可能会在平时业务中用到,有的可能就是单纯造火箭。下面我汇总了一些我在面试中遇到的,以及我复习的一些面试相关的东西。html
http缓存基本面试中都会考到,主要记忆点为强缓存、协商缓存。前端
加分点:web
强缓存:from memory cache,from disk cache什么区别?Expires和Cache-Control的区别面试
协商缓存:两个标志位的区别。chrome
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握手过程:客户端发送ACK包给服务端。当服务端接收到ACK包以后,向客户端发送ACK+SYN包。客户端接收到ACK+SYN包以后,向服务端返回SYN包。
三次握手是识别客户端发送和接收能力的最小安全次数。
四次挥手过程:
一、客户端像服务端发送fin包,以后客户端不能发送数据,只能读取数据。
二、服务端收到fin包以后,像客户端发送ACK包,此时服务端只能发送数据,不能接收数据。
三、当数据发送完毕以后,服务端会发送fin包给客户端。此时服务端不能读取数据也不能接收数据
四、当客户端收到fin包时,将发送ack包给服务端,本身等待足够多的时间,便进入closed状态。服务端接收到ack包的时候,也会进入到closed状态。
为何挥手过程要4次?
由于TCP是双工通道,服务端和客户端都可以发送和接收数据。两边是同时运转的。
https的握手过程分为两步:证书校验和数据传输
一、客户端访问web服务器,服务器返回数字签名(公钥,证书信息,服务端信息,hash值)。
二、客户端经过证书机构颁发的私钥对数字签名进行解密。校验证书信息和服务端信息以后,生成随机数,用公钥进行加密。
三、数据返回给服务端以后,服务端使用相应的私钥进行解密,获得随机数。
四、以后服务端与客户端就经过随机数的对称加密方式进行交互。
拿到服务端给的数字签名以后,客户端会根据机构颁发的私钥对数字签名的东西进行解密。解密出来,内部会含有服务端信息和证书的信息。
证书信息须要校验如下几方面:
一、颁发证书的第三方机构(CA)是否受客户端的信任。
二、对比系统时间校验证书是否在有效期。
三、经过CRL或者OCSP的方式校验证书是否被吊销。
四、经过校验对方是否存在证书的私钥,判断证书的网站域名是否与证书颁发的域名一致。
对称加密的加解密钥匙是同一个,密钥在传输过程当中容易被第三方截取,安全性相对较低。
非对称加密一共有一对钥匙,分为公钥和私钥。公钥进行加密过程,私钥用于解密过程。性能上相对于对称加密来的低。
非对称加密和对称加密在https中的应用:因为性能缘由,https只有在第一次创建的时候会使用非对称加密,以后的过程都是走随机数的对称加密方式。
中间人攻击就是在没有ca证书以前,公钥在传输过程当中也能够被截获。
中间人截获公钥以后,将公钥替换成本身的公钥。
而后客户端收到伪造公钥以后,用其进行加密操做以后,返回给服务端。
在返回过程当中,中间者再次将数据截获,用私钥进行解密。
解密完成以后,将数据在用真公钥进行加密,返回给服务端。
全部数据至关于在明文传输。
主要区别在如下4个点:
一、二进制传输:http2.0的数据是以二进制的形式传输的,最小单位是帧,多个帧组成数据流的形式传输。而http1.1如下是以明文文本格式传输的。明显二进制传输方式更加高效
二、头部压缩:http1.1的时候在每次请求都会携带大量重复头部信息。可是在http2.0的时候,只须要发送改变的头部信息就行。
三、服务器推送:服务端能够在发送html的时候主动推送其余资源,不须要等浏览器在请求到相应位置的时候再去请求。
四、多路复用,详细能够看下面一个问题
http/1每次请求都会创建一次tcp连接,也就是咱们说的三次握手四次挥手。这个过程是很是耗时的,尽管能够开启keep-alive去避免屡次链接的问题。可是仍是存在一下两个问题:
一、串行的文件传输方式。文件传输的过程是,当a文件传输时,b文件只能等待。而a文件在传输过程当中,须要经历链接服务,服务器处理文件,以及断开服务等三个过程。假设每一个过程耗时1s,那么a文件耗时就是3s,那么b文件传输完成就是6s
二、链接数过多。当客户端发起多个请求时,浏览器会对请求的并发数作一个限制,chrome的最大并发数是6个,那么第7个请求的时候就须要等前面的请求完成以后,才能拿到相应的结果。
而http2以后,改为了二进制传输,也就多了帧和流的概念。
数据在一个tcp链接中按流的形式传输,帧就是其中最小的传输单位,而帧中带有标示位,能够识别是从哪一个流中来的,到服务端以后,服务端会将帧数据从新整合成流,也就是所说的多路复用。
http报文分为请求报文和相应报文。他们分别分为4个部分:
一、请求行/响应行:请求行由方法,URL,http版本组成。好比:GET /index.html HTTP/1.1。响应行由http版本和状态码组成,好比:HTTP/1.1 200ok
二、请求头部/响应头部:头部由一些key:value的字段组成
三、空行:做用主要是用来分割头部和实体。
四、请求体/响应体:请求体主要携带post时候的一些参数。响应体主要携带服务端返回的一些数据。
这里就介绍一些经常使用的状态码
1XX:临时响应
2XX:成功
3XX:重定向
4XX:客户端错误
5XX:服务端错误
请求字段:
响应字段: