共计 6386 个字符,预计需要花费 16 分钟才能阅读完成。
前言
系列首发于公众号『前端进阶圈』,若不想错过更多精彩内容,请“星标”一下,敬请关注公众号最新消息。
前端面试实录 HTTP 篇
1. http ~ http3.0?
http
带宽
提早
浏览器阻塞(HOL blocking)
DNS 查问(DNS lookup)
建设连贯(initial connection)
http1.0
无奈复用
:每次申请都会与服务器建设一次连贯,耗费传输很大,队头阻塞
:如果有多个申请,前一个申请的响应后果后能力发送下一个申请。所以所有的申请都会在先进先出的队列中,如果队头意外阻塞,就会造成队头阻塞问题。
http1.1
缓存管制
:新增了ETag, Last-Modified, Expires,Cache-Control
来管制缓存长连贯
:通过设置Connection: keep-alive
属性来放弃http
连贯能够在一个TCP
连贯上发送多个申请分块传输
管线化
:将多个申请整批提交,在发送申请过程中也不须要期待服务器的响应
http2.0
二进制分帧 Binary Format
:http2.0 的根本单位是二进制,之前采纳的文本的形式传输,健壮性不是很好,后续改用了二进制的格局,更不便更强壮。多路复用 MultiPlexing
: http2.0 的多路复用是把多个申请当做多个流,申请响应数据分成多个帧,不同流中的帧交织发送,解决了TCP
连贯数量过多,TCP
连贯慢的问题,所以,在同一个域名中只须要创立一个连贯即可。header 压缩 header compress
: http2.0 压缩了 header, 防止了反复申请头的传输,并缩小了传输的大小。服务端推送 server push
: http2.0 的服务器推送,浏览器发送申请后,服务器会被动寻找与这个申请相干的资源,将这些资源和这个申请一并返回,这样,浏览器后续就不须要在申请,也缩小了申请次数。申请优先级 request prioritization
:http2.0 能够设置申请的优先级,可依照优先级来解决队头阻塞的问题
http3.0
0RTT 建设平安连贯
: 基于DH
密钥替换算法,在一个数据包中就能够蕴含无效的利用数据,从而在连贯提早上有所晋升,可节约数百毫秒的工夫连贯迁徙
: http3.0 是基于UDP
来实现的,简略来说,咱们切换 wifi 和 4G 时,不同基站之前不会造成重连的问题,从而进步了各种体验。队头阻塞问题
: 一个数据包影响了一堆数据包,从而造成队头阻塞问题新的拥塞机制
: 改用了UDP
的形式,也就相应的改了UDP
的拥塞机制前向纠错
:QUIC
每发送一组数据就对这组数据进行异或运算,并将后果作为一个FEC
包发送进来,接管方收到这一组数据后依据数据包和FEC
包即可进行校验和纠错。个性热插拔
:因为外围能力都在用户态实现的,不依赖内核,调整拥塞控制算法等行为都变得更为简略前向平安问题
: 前向平安指的是密钥透露也不会让之前加密的数据被透露,影响的只有以后数据,对之前的数据无影响。
2. GET 和 POST 的不同点?
GET
申请参数会保留在浏览器记录历史汇总,而POST
申请参数不会保留GET
只承受ASCII
字符串,而POST
没有限度,也能够二进制GET
申请产生一个TCP
数据包,而POST
产生两个TCP
数据包GET
申请可增加为书签,而POST
申请不能够GET
申请有长度限度,而POST
申请没有限度GET
申请不是很平安,因为会一些参数显示在URL
地址栏上,而POST
申请不会,但也不是很平安,如果传输敏感数据,要进行数据加密GET
申请个别用来获取资源,可适当进行申请缓存,而POST
不行,POST
是更新 / 获取资源,必须要与数据库交互,所以不能应用缓存
3. 常见的 HTTP 办法?
GET:
获取资源POST
: 创立 / 更新资源PUT
: 更新资源HEAD
: 相似于GET
, 但响应式不是数据,而是HTTP
的header
信息DELETE
: 删除资源OPTIONS
: 容许客户端查看服务器的性能TRACE
: 回显服务器收到的申请,用于测试和诊断COPY
: 申请服务器将指定页面拷贝到另一个地址LINK
: 申请与服务器建设连贯UNLINK
: 断开与服务器的链接关系
4. HTTP 与 HTTPS 的共同点与不同点?
共同点:
- 都是采纳雷同的协定,在客户端建设一个连贯与 Web 服务器指定的端口来传播信息
不同点:
HTTP
与HTTPS
两者传输的安全性不同,HTTP
应用的是超文本传输协定,而HTTPS
应用的 SSL 加密传输协定HTTP
与HTTPS
两者应用的端口不同,HTTP
应用的是80
端口,而HTTPS
应用的是443
端口HTTPS
协定须要CA
证书,个别收费的证书较少,须要付费。HTTP
是没有证书
5. 常见的 HTTP 状态码:
1xx: 批示信息
100(持续)
: 示意持续,在发送post
申请时,已发送了HTTP header
后,服务器端将返回此信息,示意确认,之后发送具体的参数信息。101(切换协定)
: 要求服务器依据申请转换HTTP
协定版本
2xx: 胜利
200(胜利)
: 服务器胜利返回申请的数据。201(已创立)
: 示意申请胜利并且服务器创立了新的资源202(已承受)
: 示意服务器已承受申请,但尚未解决203(非受权信息)
: 服务器已胜利解决了申请,但返回的信息可能来自另一起源。204(无内容)
: 服务器胜利解决了申请,但没有返回任何内容。205(重置内容)
: 服务器胜利解决了申请,但没有返回任何内容。206(局部内容)
: 服务器胜利解决了局部GET
申请。
3xx: 重定向
300(多种抉择)
: 针对申请,服务器可执行多种操作。301(永恒重定向)
: 示意申请的网页已永恒的挪动到新的地位302(长期重定向)
: 示意临时性重定向303(查看其余地位)
304(未修改)
: 自从上次申请后,申请的网页未修改过。服务器返回此响应时,不会返回网页内容。305(应用代理)
: 请求者只能应用代理拜访申请的网页。如果服务器返回此响应,还示意请求者应应用代理。307(长期重定向)
: 服务器目前从不同地位的网页响应申请,但请求者应持续应用原有地位来进行当前的申请。
4xx: 客户端谬误
400(谬误申请)
:服务器不了解申请的语法。401(未受权)
:申请要求身份验证。403(禁止)
:服务器拒绝请求。404(未找到资源)
:示意找不到任何与URL
相匹配的资源,资源不存在405(办法禁用)
:禁用申请中指定的办法。406(不承受以后格局)
:无奈应用申请的内容个性响应申请的网页。407(须要代理受权)
:此状态代码与401(未受权)
相似,但指定请求者该当受权应用代理。408(申请超时)
:服务器等待申请时产生超时。409(抵触)
:服务器在实现申请时发生冲突。服务器必须在响应中蕴含无关抵触的信息。410(已删除)
:如果申请的资源已永恒删除,服务器就会返回此响应。411(须要无效长度)
:服务器不承受不含无效内容长度标头字段的申请。412(未满足前提条件)
:服务器未满足请求者在申请中设置的其中一个前提条件。413(申请实体过大)
:服务器无奈解决申请,因为申请实体过大,超出服务器的解决能力。414(申请的 URI 过长)
:申请的URI
(通常为网址)过长,服务器无奈解决。415(不反对的媒体类型)
:申请的格局不受申请页面的反对。416(申请范畴不符合要求)
:如果页面无奈提供申请的范畴,则服务器会返回此状态代码。417(未满足期望值)
:服务器未满足 ” 冀望 ” 申请标头字段的要求。422(验证谬误)
:当创立一个对象时,产生一个验证谬误。449(重试申请)
:应进行重试424(谬误导致)
:因之前某个接口失败,导致以后申请失败422(语义谬误)
:申请格局正确,然而因为含有语义谬误,无奈响应。421(连接数超出)
:连接数超过了服务器许可的最大范畴
5xx: 服务器端谬误
500(服务器外部谬误)
:服务器端谬误501(尚未施行)
:服务器不反对该申请502(谬误网关)
503(服务不可用)
:示意服务器临时无奈解决申请,可能是过载或保护504(网关超时)
505(HTTP 版本不受反对)
506(服务器外部配置谬误)
509(服务器达到带宽限度)
6. PUT 与 POST 申请的区别?
PUT
申请用于更新已存在的资源,而POST
申请则用于创立新资源或提交更新PUT
申请是幂等的,而POST
申请不是。PUT
申请是幂等的,即屡次调用同一个PUT
申请对资源的状态不会有影响,而POST
申请不是幂等的,即屡次调用同一个POST
申请可能会生成多个资源,或者对已存在资源进行屡次更新。PUT
申请须要指定要更新的资源的具体位置,而POST
申请能够将数据提交到任何地位。
7. 常见的 HTTP 申请头和响应头?
申请头:
Cache-Control
:管制是否应用缓存机制Cookie
:Cookie
值Content-Type
: 罕用于POST
和PUT
申请Date
: 发送申请的日期和工夫Content-Length
: 申请体的长度Etag
: 管制缓存的标记符Host
: 申请的域名和端口号,默认 80,可省略User-Agent
: 浏览器的身份标识字符串Referer
:浏览器前一个拜访的页面门路
响应头:
Access-Control-Allow-Origin
: 指定哪些网站能够跨域源资源共享Age
: 缓存工夫,以秒为单位Allow
: 容许的申请格局Cache-Control
: 管制缓存,Cache-Control: max-age=3600
, 以秒为单位Content-Type
: 响应内容类型:application/json, multipart/form-data, application/x-www-form-urlencoded
Date
: 发送申请的日期和工夫ETag
: 管制缓存的标记符Expires
: 过期工夫Last-Modified
: 所申请资源的最初工夫Server
: 服务器名称
8. GET 办法 URL 长度限度的起因?
- 实际上 HTTP 协定并没有对 GET 办法做 URL 长度限度,这个限度是特定的浏览器以及服务器对他的限度
GET 的长度值 = URL(2083)-(你的 Domain+Path)-2(2 是 get 申请中?= 两个字符的长度)
各类浏览器对 GET 办法 URL 长度限度:
- IE:
2083
个字符,如果超出,则没有任何响应 - Firefox:
65536
个字符 - Safari:
80000
个字符 - Opera:
190000
个字符 - Google:
8182
个字符
- IE:
支流服务对 URL 长度限度:
- Apache:
8192
个字符 - Microsoft Internet Information Server:
16384
个字符
- Apache:
9. HTTP 协定的优缺点?
长处:
- 简略,灵便,便于扩大
- 利用宽泛,环境成熟
- 无状态,因为没有任何记录信息,可减轻服务器的累赘,
毛病:
- 明文传输,数据可见
- 因为无状态,所以无奈进行多个步骤:比方:退出购物出,结算,领取。每次都须要验证身份信息,然而无状态所以无奈间断。解决办法,就是 cookie 技术
- 不平安,无奈验证通信单方的身份信息。
10. URL 由那些局部组成?
- eg:
https://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#anchor
组成:
- 协定:默认是 HTTP 协定,
http/https
, 如果省略协定,间接在浏览器地址栏输出www.example.com
,那么浏览器默认会拜访 http://www.example.com - 主机:
www.example.com/192.168.2.15
- 端口:
www.example.com:80(默认 80, 可省略)
, 端口紧跟在域名前面,两者之间应用冒号分隔, - 门路:
/path/index.html
: 指向网站的/path
子目录上面的网页文件index.html
- 查问参数:两者之间应用
?
分隔,上例是?key1=value1&key2=value2
。每组参数都是键值对(key-value pair)的模式,同时具备键名 (key) 和键值(value),它们之间应用等号(=)连贯。比方,key1=value 就是一个键值对,key1 是键名,value1 是键值。 - 锚点:锚点(anchor)是网页外部的定位点,应用 #加上锚点名称,放在网址的最初,比方#anchor。浏览器加载页面当前,会主动滚动到锚点所在的地位。锚点名称通过网页元素的 id 属性命名,
- 协定:默认是 HTTP 协定,
11. 什么是 HTTPS 协定?
HTTP
:超文本传输协定,一个基于TCP/IP
通信协议来传递数据。HTTPS
:超文本传输平安协定,由HTTP
进行通信,但利用了SSL/TLS
来加密数据包,可保证数据的隐衷和完整性。
12. 对 websocket 的了解?
- 了解:
HTML5
提供的一种浏览器与服务器进行全双工通信的网络技术,属于应用层协定,是基于TCP
传输协定的,并复用了HTTP
握手通道,浏览器只须要和服务器实现一次握手,两者之间就能够创立持久性的连贯,进行双向数据传输(服务器向客户端被动推动音讯,客户端被动向服务器推送音讯)。 - 原理:客户端向
websocket
服务器告诉一个带有接受者ID
的事件,而后服务器接管到后告诉在接受者ID
列表中的客户端进行解决。
13. 即时通讯的实现:短轮询、长轮询、SSE 和 WebSocket 间的区别?
短轮询
:客户端每隔一段时间发送一次申请,服务器接管到申请后,不论数据有没有更新,都会申请响应。这种形式比较简单,但须要一直发送申请,很浪费资源,当用户量减少时,服务器的压力就会很大,不合理。长轮询
:客户端向服务器发送申请,当服务器接管到申请后,不会间接进行响应,而是先将这个申请挂起,而后再判断服务端的数据是否有更新,如果有更新,则进行响应,如果没有,则达到肯定工夫限度才返回。客户端接管到服务器的响应数据后,再次收回其余申请,从新建设连贯。长轮询和短轮询相比,长轮询缩小了很多不必要的申请数,比之前节俭了资源。SSE(Server Sent Event)
: 服务器应用流信息向客户端推送信息,严格来说,http
协定是无奈做到服务器被动推送音讯的,但有一种变通方法,就是服务器向客户端申明,接下来要发送的是一个数据流,而不是一次性的数据包,会有数据一直地发送过去,这时候客户端就不会敞开连贯,等始终期待服务器发送新的数据流,视频播放相似。目前出了IE/edge
,其余浏览器都反对,绝对于长轮询和短轮询,这种形式不必建设过多的http
申请数。WebSocket
:HTML5
提供的一种浏览器与服务器进行全双工通信的网络技术,属于应用层协定,是基于TCP
传输协定的,并复用了HTTP
握手通道,浏览器只须要和服务器实现一次握手,两者之间就能够创立持久性的连贯,进行双向数据传输(服务器向客户端被动推动音讯,客户端被动向服务器推送音讯)。
特殊字符形容:
- 问题标注
Q:(question)
- 答案标注
R:(result)
- 注意事项规范:
A:(attention matters)
- 详情形容标注:
D:(detail info)
- 总结标注:
S:(summary)
- 剖析标注:
Ana:(analysis)
提醒标注:
T:(tips)
往期举荐:
- 前端面试实录 HTML 篇
- 前端面试实录 CSS 篇
- JS 如何判断一个元素是否在可视区域内?
- Vue2、3 生命周期及作用?
- 排序算法:QuickSort
- 箭头函数与一般函数的区别?
- 这是你了解的 CSS 选择器权重吗?
- JS 中 call, apply, bind 概念、用法、区别及实现?
- 罕用位运算办法?
- Vue 数据监听 Object.definedProperty()办法的实现
- 为什么 0.1+ 0.2 != 0.3,如何让其相等?
- 聊聊对 this 的了解?
JavaScript 为什么要进行变量晋升,它导致了什么问题?
最初:
- 欢送关注『前端进阶圈』公众号,一起摸索学习前端技术 ……
- 公众号回复 加群 或 扫码, 即可退出前端交流学习群,一起高兴摸鱼和学习 ……
- 公众号回复 加好友,即可添加为好友
正文完