学习5月13日
1. http状态码301和302的应用场景分别是什么
a) 301表示永久重定向
b) 302表示临时重定向
2. Cookie和token都存放在header中,为什么不会劫持token?
a) 由于浏览器会自动发送cookie到服务器,因此攻击者可以利用这种特点进行csrf攻击。
b) 通常token是不放在cookie中的,需要浏览器端使用JS自行保存到localstorage中,在请求时也需要手动的加入到请求头中,因此不容易引起csrf攻击。
3. 如何实现Token加密?
a) 以常见的token格式jwt为例,token分为三段,分别是header,payload,signature。
b) 其中,header标识签名算法和令牌类型;payload标识主体信息,包含令牌过期时间、发布时间、发行者、主体内容等;signature是使用特定的算法对前面两部分进行加密,得到的加密结果。
c) Token有防篡改的特点,如果攻击者改动了前面两个部分,就会导致和第三部分对应不上,使得token失效。而攻击者不知道加密密钥,因此又无法修改第三部分的值。
d) 所以,在密钥不被泄露的前提下,一个验证通过的token是值得信任的。
4. http1.1是如何复用tcp连接的?
a) 通过在请求头中设置,告诉服务器这是一个长连接。
5. 文件上传如何做断点续传
a) 客户端通过将文件的二进制内容进行分片,每片的数据按顺序进行标识,上传每片数据时同时附带其序号。服务器接收到每片数据时,将其保存成一个临时文件,并记录每个文件的hash和序号。
b) 若上传中止,将来再次上传时,可以向服务器索要已上传的分片序号,客户端仅需上传剩余分片即可。
c) 当全部分片上传完成后,服务器按照分片的顺序组装成完整的文件,并删除分片文件。
6. SSL和TLS
a) 都是用于保证传输安全的协议,介于传输层和应用层之间,TLS是SSL的升级版。
b) 它们的基本流程一致:
i. 客户端向服务器端索要公钥,,并使用数字证书验证公钥。
ii. 客户端使用公钥加密会话密钥,服务端用私钥解密会话密钥,于是得到一个双方都认可的会话密钥
iii. 传输的数据使用会话密钥加密,然后再传输,接收消息方使用会话密钥解密得到原始数据。
7. 网络的五层模型
a) 从上往下分别是:应用层、传输层、网络层、数据链路层、物理层。在发送消息时,消息从上到下进行打包,每一层会在上一层基础上加包,而接收消息时,从下到上进行解包,最终得到原始信息。
b) 其中:
i. 应用层主要面向互联网中的应用场景,比如网页、邮件、文件中心等等,它的代表协议有http、smtp、pop3、ftp、DNS等等。
ii. 传输层主要面向传输过程,比如TCP协议是为了保证可靠的传输,而UDP协议则是一种无连接的广播,它们提供了不同的传输方式。
iii. 网络层主要解决如何定位目标的问题,比如IP、ICMP、ARP等等
iv. 数据链路层的作用是将数据可靠的传输到目标,比如常见的以太网协议、P2P协议。
v. 物理层是要规范网络两端使用的物理设备,比如蓝牙、wifi、光纤、网线接头等等。
8. GET和POST的区别
a) 从http协议的角度来说,GET和POST它们都只是请求行中的第一个单词,除了语义不同,其他没有本质的区别。
b) 之所以在实际的开发中会产生各种区别,主要是因为浏览器的默认行为造成的。受浏览器的影响,在实际开发中,GET与POST有以下区别:
i. 浏览器在发送GTE请求时,不会附带请求体。
ii. GET请求的传递信息有限,适合传递少量数据;POST请求的传递信息量是没有限制的,适合传输大量数据。
iii. GET请求只能传递ASCII数据,遇到非ASCII数据需要进行编码,POST请求没有限制
iv. 大部分GET请求传递的数据都附带在path参数中,能够通过分享地址完整的重现页面,但同时也暴露了数据,若有敏感数据传递,不应该使用GET请求,至少不应该放到path中。
v. 刷新页面时,若当前的页面是通过POST请求得到的,则浏览器会提示用户是否重新提交。若是GET请求得到的页面则没有提示。
vi. GET请求的地址可以被保存在浏览器书签,POST不可以。
9. HTTP劫持是什么?
a) 是指攻击者在客户端和服务器之间同时建立了连接通道,通过某种方式,让客户端请求发送到自己的服务器,然后自己就拥有了控制响应内容的能力,从而给客户端展示错误的信息。
10. DNS劫持是什么?
a) 是指攻击者劫持了DNS服务器,获得了修改DNS解析记录的权限,从而导致客户端请求的域名被解析到了错误的IP地址,攻击者通过这种方式窃取用户资料或破坏原有正常服务。
11. XSS是什么?
a) 是指跨站脚本攻击。攻击者利用站点的漏洞,在表单提交时,在表单内容中加入一些恶意脚本,当其他正常用户浏览页面,而页面中刚好出现攻击者的恶意脚本时,脚本被执行,从而使得页面遭到破坏,或者用户信息被窃取。
12. CSRF 是什么?
a) 是跨站请求伪造,是一种挟制用户在当前已登录的web应用上执行非本意的操作的攻击方法。
13. webSocket协议是什么?
a) webSocket协议HTML5带来的新协议,相对于http,它是一个持久连接的协议,它利用http协议完成握手,然后通过TCP连接通道发送消息,使用websocket协议可以实现服务器主动推送消息。
14. 前端如何实现即时通讯?
a) 短轮询。即客户端每隔一段时间就向服务器发送消息,询问有没有新的数据。
b) 长轮询,发送一次请求询问服务器,服务器可以将该请求挂起,等到有新消息再进行响应。响应后,客户端立即又发起一次请求,重复整个流程。
c) WebSocket,握手完毕后建立持久性的连接通道
15. 浏览器地址栏输入地址,并按下回车键后,发生了哪些事情?
a) 浏览器自动补全协议和端口
b) 浏览器自动完成URL编码
c) 浏览器根据url地址查找本地缓存,根据缓存规则看是否命中缓存,若命中缓存则直接使用缓存,不再发请求。
d) 通过DNS解析找到服务器ip地址
e) 浏览器向服务器发起TCP连接的申请,完成三次握手,连接通道建立。
f) 若使用了HTTPS协议,则还会进行SSL握手,建立加密信道。使用SSL握手时,会确定是否使用HTTP2
g) 浏览器决定要附带哪些cookie到请求头中
h) 浏览器自动设置好请求头、协议版本、cookie、发出GET请求
i) 服务器处理请求,进入后端处理流程。完成处理后,服务器响应一个HTTP报文给浏览器。
j) 浏览器根据使用的协议版本,以及connection字段的约定,决定是否要保留TCP连接。
k) 浏览器根据响应状态码决定如何处理这一次响应
l) 浏览器根据响应头中的contene-type字段识别响应类型,如果是text/html,则对响应体的内容进行HTML解析,否则做其他处理。
m) 浏览器根据响应头的其他内容完成缓存、cookie的设置。
n) 浏览器开始从上往下解析HTML,若遇到外部资源链接,则进一步请求资源
o) 解析过程中生成DOM树,CSSOM树,然后一边生成,一边把二者合并为渲染树,随后对渲染树中的每个节点计算位置和大小,最后把每个节点利用GPU绘制到屏幕
p) 在解析过程中还会触发一系列的事件,当DOM树完成后会触发DOMContentLoaded事件,当所有资源加载完毕后会触发load事件
16. 优化网络性能方法:
a) 优化打包体积
b) 多目标打包
c) 压缩
d) CDN
e) 缓存
f) http2
g) 雪碧图
h) defer,async