面试 | 你要懂得http相关
Posted 计算机校园角
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试 | 你要懂得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 服务器的信息
END
关注我
发现更多精彩
以上是关于面试 | 你要懂得http相关的主要内容,如果未能解决你的问题,请参考以下文章