HTTP:
1、常见的状态码:
状态码可以按照第一个数字分类,
1xx表示继续发送请求;
2xx表示请求已成功被服务器接收、理解并接收;
3xx表示需要客户端采取进一步的操作才能完成请求,通常用来重定向(每次请求使用的重定向不要超过5次);
4xx表示客户端错误,请求可能出错,妨碍了服务器的处理;
5xx表示服务器在处理请求的时候内部发生了错误;
常见的状态码有:
101切换协议,
200服务器已经成功处理请求,并提供了请求的网页,
201用户新建或修改数据成功,
202一个请求已经进入后台,
204,用户删除成功,
301永久重定向,表示资源已经被分配了新的URL
302临时重定向,表示资源临时被分配了新的URL
304未修改(用户上次请求没有更新,节省带宽和开销),
307,临时重定向,和302含义类似,但是期望客户端保持请求方法不变向新的地址发出请求
400错误请求,请求报文中存在语法错误,
401未授权,请求要求身份认证,
403禁止,服务器拒绝执行请求,
404未找到,服务器找不到请求的网页
500服务器遇到错误,无法完成请求
503服务器目前无法使用
2、304表示什么,和302有什么区别
304表示未修改,自从上次请求后,请求的网页未修改过,服务器返回此响应时不会返回网页内容。
302:历史移动,服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来继续以后的请求
3、HTTP缓存策略
强缓存和协商缓存
4、Connection为keep-active表示什么
HTTP协议采用‘请求-应答’模式,当使用普通模式时,每个请求客户和服务器都要建一个新的连接。keep-active表示浏览器想要优先使用的连接类型:开启持久连接。该功能使客户端到服务器端的连接持续有效。当出现对服务器的后继请求时,该功能避免了建立或者重新建立连接。
DNS:
1、什么是DNS
域名解析系统。将用户输入的URL解析为IP地址。
2、DNS有关的性能优化
1.减少DNS查找,避免重定向。浏览器DNS缓存、计算机DNS缓存、服务器DNS缓存、使用Keep-Alive特性来减少DNS查找。
2.DNS预解析:
可以通过用meta信息来告知浏览器,要进行DNS预解析
可以使用link标签来强制对DNS进行预解析
TCP/IP
1、tcp/ip四层模型:
应用层:用来进行文件传输,提供文件传输协议(ftp、dns、http)
运输层:提供端对端的接口,提供网络连接中两台计算机之间数据传输所需要的协议(tcp/udp)
网络层:数据通过怎样的传输路线到达对方计算机传送给对方
数据链路层:传输有地址的帧
TCP:
1、三次握手
第一次握手:客户端发送一个请求链接,等待服务器端确认
第二次握手:服务端给客户端发送一个链接,告诉客户端自己收到请求
第三次握手:客户端收到服务器端的包,向服务器发送确认包,此包发送完毕后,进入连接状态
2、四次挥手
理解过程,为什么三次挥手不可以
HTTPS:
1、HTTPS的工作原理
客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤:
客户使用https url访问服务器,则要求web服务器建立ssl连接
web服务器接收到客户端的请求之后,将网站的证书(证书中包含公钥),传输给客户端
客户端和web服务器开始协商ssl连接的安全等级
客户端浏览器通过双方协商一致的安全等级,建立会话密钥,然后通过网站的公钥来加密会话密钥,并传送给网站
web服务器通过自己的私钥解密出会话密钥
web服务器通过会话密钥加密与客户端之间的通信
2、HTTPS和HTTP的区别
1.HTTPS协议需要到证书颁发机构申请证书,免费的证书很少,需要付费
2.HTTP运输在tcp之上,明文传输;HTTPS运行在ssl之上,所有的信息加密传输
3.使用的连接方式不同,端口号也不同,HTTPS协议的端口号是443,HTTP协议的端口号是80
4.http的连接很简单,是无状态的;https是通过ssl+https协议构建的可进行身份认证,加密传输的协议,比http协议安全
CDN:
1、什么是CDN以及它的应用场景
CDN是内容分发网络,核心作用是提高网络的访问速度。多应用在那些访问量很大的网站,如大型企业网站,政府网站,电商网站等。
2、CDN的回源是什么
当CDN缓存服务器没有符合客户端要求的资源的时候,缓存服务器会请求上一级缓存服务器,以此类推,直到获取到。最后如果还是没有,就会到我们自己的服务器获取资源。
浏览器缓存:
缓存是性能优化中最简单高效的一种优化方式。
一个数据请求可以分为:网络请求,后端处理,浏览器响应三个步骤。浏览器缓存可以在网络请求和浏览器响应阶段进行性能优化。
通常浏览器缓存策略分别为两种,强缓存和协商缓存,缓存策略都是通过设置HTTP请求头来实现的。
浏览器对于缓存的处理是根据第一次请求资源时返回的响应头来确定的。
浏览器每次发送请求,都会先在浏览器缓存中查找该请求的结果以及缓存标识。
浏览器每次拿到返回的请求结果都会将该结果和缓存标识存入浏览器缓存中。
强缓存:不会向服务器发送请求,直接从缓存中读取资源,在chrome控制台的Network选项中可以看到该请求返回200的状态码,并且Size显示from disk cache或from memory cache。强缓存可以通过设置两种HTTP Header实现:Expires和Cache-Control。
1、Expires,缓存过期时间,用来指定资源到期的时间,是服务器端的具体的时间点。Expires受限于本地时间,如果修改了本地时间,可能会造成缓存失败。
2、Catch-Control,可以在请求头或者响应头中设置,并且可以组合使用多种指令。常见的指令有:public,private,max-age,mac-state,min-fresh。
两者的区别:Expries是http1.0的产物,Cache-Control是http1.1的产物,两者同时存在的话,Cache-Control的优先级高于Expries
协商缓存:就是在强缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程。协商缓存可以通过设置两种HTTP Header实现:Last-Modified和ETag。
1、协商缓存生效,返回304和Not Modified
2、协商缓存失败,返回200和请求结果
3、Last-Modified和If-Modified-Since,根据文件修改时间来决定缓存。If-Modified-Since和服务器中这个资源的最后修改时间对比,没有变化则304,有变化则200。该方法的弊端是如果不是在可感知的时间内修改完成文件,那么服务器还是会认为资源命中了,不会返回正确的资源。
4、ETag和If-None-Match,根据文件内容是否修改来决定缓存。客户端传来的If-None-Match与服务器上该资源的ETag对比,一样返回304,不一样返回200。
两者区别:精确度上,ETag由于Last-Modified
性能上,ETag比Last-Modified低
优先级上,应优先考虑ETag
强缓存优先于协商缓存进行,若强制缓存生效则直接使用缓存,如不生效则进行协商缓存。
经典且老套的问题:
从输入URL到页面展示,发生了什么?
dns地址解析 => tcp连接 => 发送http请求报文 => 服务器处理请求并返回http报文 => 浏览器渲染解析界面 => 连接结束
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。