学习5月13日

60 阅读8分钟

学习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