1.简述 TCP 连接的过程
TCP通过三次握手建立可靠的点对点连接,具体过程是:
第一次握手:客户端发送syn包到服务器,并进入SYN_SENT状态,等待服务器确认。在发送包中还有一个初始序列号seq。此次握手的含义是客户端希望与服务器建立连接。
第二次握手,服务器收到syn包,然后回应一个SYN+ACK包,此时服务器进入SYN_RCVD状态。此次握手的含义是服务端回应客户端,表示已收到并同意客户端的连接请求。
第三次握手,客户端收到服务器的SYN包后,向服务器再次发送ACK包,并进入ESTAB_LISHED状态。
2.HTTPS中间人攻击
针对HTTPS的中间人攻击分为SSL劫持攻击和SSL剥离攻击。
SSL 劫持攻击是指攻击者劫持了客户端和服务器之间的连接,将服务器的合法证书替换为伪造的证书,从而获取客户端和服务器之间传递的信息。这种方式一般容易被用户发现,浏览器会明确的提示证书错误,但某些用户安全意识不强,可能会点击继续浏览,从而达到攻击目的。
SSL 剥离攻击是指攻击者劫持了客户端和服务器之间的连接,攻击者保持自己和服务器之间的 HTTPS 连接,但发送给客户端普通的 HTTP 连接,由于 HTTP 连接是明文传输的,即可获取客户端传输的所有明文数据。
3.介绍http1.0、http1.1和http2.0协议的区别?
http1.0:
1. 无法复用连接:每次都要重新建立TCP
2. 队头阻塞
http1.1:
1. 长连接:connection: keep-alive 一个chrome域名下6个请求
2. 管道化:基于长连接的基础上,管道化可以不等第一个请求响应继续发送后面的请求,但响应的顺序还是按照请求的顺序返回,后续请求需要排队等待,这时候就存在队头阻塞问题。
3. 缓存处理:cache-control,实现客户端缓存。
4. 断点传输
http2.0:
1. 二进制分帧:将传输的消息分为更小的二进制帧,每帧有自己的标识序号,即便被随意打乱也能在另一端正确组装。将同一个ID的stream的二进制进行组装成请求报文和响应报文。
2. 多路复用:基于二进制分帧,在同一域名下所有访问都是从同一个 tcp 连接中走,并且不再有队头阻塞问题,也无须遵守响应顺序
3. 头部压缩:通过字典的形式,压缩头部信息,通过索引取值,减少头部数据量
4. 服务器推送:http2.0 允许服务器直接推送消息给客户端,无须客户端明确的请求
4.为什么HTTP1.1不能实现多路复用?
因为http1.1不是二进制帧传输,而是通过文本传输。由于没有流的概念,在使用并行传输(多路复用)传递数据时,接收端在接收到响应后,并不能区分多个响应分别对应的请求,所以无法将多个响应的结果重新进行组装,也就实现不了多路复用。
5.简单讲解下http2的多路复用
在http2中,有两个非常重要的概念,分别是帧和流。帧代表最小的数据单位,每个帧会标识属于哪个流,流也就是多个帧组成的数据流。多路复用,就是在一个 TCP 连接中可以存在多条流。换句话说,也就是可以发送多个请求,对端可以通过帧中的标识知道属于哪个请求。通过这个技术,可以避免 HTTP 旧版本中的队头阻塞问题,极大的提高传输性能。
队头阻塞问题也可以通过域名分片的形式解决
6.谈谈对TCP三次握手和四次挥手的理解
第一次握手:客户端发送SYN包到服务器,并进入SYN_SENT阶段,另外还有一个初始序列号seq。此次握手客户端希望与服务器建立连接。
第二次握手:服务器接收到syn包,然后回应给客户端一个SYN+ACK包。此次握手的含义是服务端回应客户端,表示已收到并同意客户端的连接请求。
第三次握手:客户端收到syn包后,向服务器再次发送ACK包,进入连接状态。
当需要关闭连接时,需要进行四次挥手才能关闭
第一次挥手:客户端向服务端发送FIN包,表示客户端主动要关闭连接,然后进入FIN_WAIT_1状态,等待服务器返回 ACK 包。此后客户都安不能再向 Server 发送数据,但能读取数据。
第二次挥手:Server 收到 FIN 包后向 Client 发送 ACK 包,然后进入 CLOSE_WAIT 状态,此后 Server 不能再读取数据,但可以继续向 Client 发送数据。
Server 完成数据的发送后,将 FIN 包发送给 Client,然后进入 LAST_ACK 状态,等待 Client 返回 ACK 包,此后 Server 既不能读取数据,也不能发送数据。
7.介绍HTTPS握手过程
1. 客户端请求服务器,告诉服务器支持加密的算法及密钥长度等信息
2. 服务器响应公钥和服务器证书
3. 客户端验证证书是否合法,然后生成一个会话密钥,并用服务器的公钥加密密钥,把加密的结果通过请求发送给服务器
4. 服务器使用私钥解密被加密的会话密钥并保存起来,然后使用会话密钥加密消息响应给客户端,表示自己已经准备就绪
5. 客户端使用会话密钥解密信息,知道服务器已经准备就绪
6. 后续客户端和服务端使用会话密钥进行通信
8.HTTPS握手过程中,客户端如何验证数字证书的合法性?
1. 校验证书的颁发机构是否受客户端信任
2. 通过CRL校验证书是否被吊销
3. 对比系统时间,看是否有效
4. 通过校验对方是否存在证书的私钥,判断证书的网站域名是否与证书颁发的域名一致。
9.Http 状态码 301 和 302 的应用场景分别是什么
301表示永久重定向,302表示临时重定向
如果浏览器收到的是 301,则会缓存重定向的地址,之后不会再重新请求服务器,直接使用缓存的地址请求,这样可以减少请求次数。
但如果浏览器收到的是 302,则不会缓存重定向地址,浏览器将来会继续以原有地址请求。
因此,301 适合地址永久转移的场景,比如域名变更;而 302 适合临时转移的场景,比如首页临时跳转到活动页
10.cookie和token都放在header中,为什么不会劫持token?
由于浏览器会自动发送cookie到服务器,因此攻击者可以利用这种特点进行 csrf 攻击。
而通常 token 是不放到 cookie 中的,需要浏览器端使用 JS 自行保存到 localstorage 中,在请求时也需要手动的加入到请求头中,因此不容易引发 csrf 攻击。
11.介绍下如何实现token加密
jwt为例子,token分三段,分别是payload,header,signature
其中,header 标识签名算法和令牌类型;payload 标识主体信息,包含令牌过期时间、发布时间、发行者、主体内容等;signature 是使用特定的算法对前面两部分进行加密,得到的加密结果。
token 有防篡改的特点,如果攻击者改动了前面两个部分,就会导致和第三部分对应不上,使得 token 失效。而攻击者不知道加密秘钥,因此又无法修改第三部分的值。
所以,在秘钥不被泄露的前提下,一个验证通过的 token 是值得被信任的。
12.单点登录
具体流程是:
1. 用户访问系统 1 的受保护资源,系统 1 发现用户未登录,跳转至 sso 认证中心,并将自己的地址作为参数
2. sso 认证中心发现用户未登录,将用户引导至登录页面
3. 用户输入用户名密码提交登录申请
4. sso 认证中心校验用户信息,创建用户与 sso 认证中心之间的会话,称为全局会话,同时创建授权令牌
5. sso 认证中心带着令牌跳转会最初的请求地址(系统 1)
6. 系统 1 拿到令牌,去 sso 认证中心校验令牌是否有效
7. sso 认证中心校验令牌,返回有效,注册系统 1
8. 系统 1 使用该令牌创建与用户的会话,称为局部会话,返回受保护资源
9. 用户访问系统 2 的受保护资源
10. 系统 2 发现用户未登录,跳转至 sso 认证中心,并将自己的地址作为参数
11. sso 认证中心发现用户已登录,跳转回系统 2 的地址,并附上令牌
12. 系统 2 拿到令牌,去 sso 认证中心校验令牌是否有效
13. sso 认证中心校验令牌,返回有效,注册系统 2
14. 系统 2 使用该令牌创建与用户的局部会话,返回受保护资源
13.http1.1是如何复用tcp连接的?
connection:keep-alive
14.文件上传如何做断点续传
客户端将二进制内容进行分片,每片数据给一个hash,而据文件内容生成的hash。服务器接收到每片数据时,将其保存成一个临时文件,并记录每个文件的 hash 和序号。
若上传中止,将来再次上传时,可以向服务器索要已上传的分片序号,客户端仅需上传剩余分片即可。
当全部分片上传完成后,服务器按照分片的顺序组装成完整的文件,并删除分片文件。
15.介绍SSL和TSL
都是用于保证传输安全的协议,介于传输层与应用层之间。TLS是SSL的升级版。
它们基本流程一致:
1. 客户端向服务器索要公钥,并使用数字证书验证公钥。
2. 客户端用公钥加密会话密钥,服务端用私钥解密会话密钥,于是双方都有一个得到公认的会话密钥
3. 传输的数据使用会话密钥进行加密,然后传输,接收消息方使用会话密钥进行解密得到原始数据
16.说说网络的五层模型
从上到小分别是:应用层、传输层、网络层、数据链路层、物理层。在发送消息时,数据从上到下进行打包,每一层会在上一层基础上进行加包,而接收消息是从下到上进行解包,最终得到原始信息。
其中:
应用层主要面向互联网中的应用场景,比如网页、邮件、文件中心等等,它的代表协议有 http、smtp、pop3、ftp、DNS 等等
传输层主要面向传输过程,比如 TCP 协议是为了保证可靠的传输,而 UDP 协议则是一种无连接的广播,它们提供了不同的传输方式
网络层主要解决如何定位目标的问题,比如 IP、ICMP、ARP 等等
数据链路层的作用是将数据可靠的传输到目标,比如常见的以太网协议、P2P 协议
物理层是要规范网络两端使用的物理设备,比如蓝牙、wifi、光纤、网线接头等等
17.GET 和 POST 的区别
从http协议的角度来看,GET 和 POST 它们都只是请求行中的第一个单词,除了语义不同,其实没有本质的区别。
受浏览器的影响,在实际开发中,GET 和 POST 有以下区别:
1. 浏览器发送GET请求时,不会附带请求体
2. GET请求的信息量有限,适合传递少量数据;POST请求的传递信息量没有限制,适合传输大量数据。
3. GET请求只能发送ASCII数据,POST请求没有限制
4. 大部分 GET 请求传递的数据都附带在 path 参数中,能够通过分享地址完整的重现页面,但同时也暴露了数据,若有敏感数据传递,不应该使用 GET 请求,至少不应该放到 path 中
5. GET会被缓存,POST不会
6. GET 请求的地址可以被保存为浏览器书签,POST 不可以
18.http劫持是什么?
是指攻击者在客户端和服务器之间同时建立了连接通道,通过某种方式,让客户端请求发送到自己的服务器,然后自己就拥有了控制响应内容的能力,从而给客户端展示错误的信息。
19.HTTP劫持,DNS劫持以及XSS
http 劫持是指攻击者在客户端和服务器之间同时建立了连接通道,通过某种方式,让客户端请求发送到自己的服务器,然后自己就拥有了控制响应内容的能力,从而给客户端展示错误的信息,比如在页面中加入一些广告内容。
DNS 劫持是指攻击者劫持了 DNS 服务器,获得了修改 DNS 解析记录的权限,从而导致客户端请求的域名被解析到了错误的 IP 地址,攻击者通过这种方式窃取用户资料或破坏原有正常服务。
XSS 是指跨站脚本攻击。攻击者利用站点的漏洞,在表单提交时,在表单内容中加入一些恶意脚本,当其他正常用户浏览页面,而页面中刚好出现攻击者的恶意脚本时,脚本被执行,从而使得页面遭到破坏,或者用户信息被窃取。
要防范 XSS 攻击,需要在服务器端过滤脚本代码,将一些危险的元素和属性去掉或对元素进行HTML实体编码。
20.介绍CSRF, XSS攻击
XSS:跨站脚本攻击。攻击者利用站点的漏洞,在表单提交时,在表单内容中加入一些恶意脚本,当其他正常用户浏览页面,而页面中刚好出现攻击者的恶意脚本时,脚本被执行,从而使得页面遭到破坏,或者用户信息被窃取。
如何防御:1. 过滤脚本代码 2. 对html进行编码 3. 危险元素属性去除
CSRF:
CSRF 是跨站请求伪造,是一种挟制用户在当前已登录的Web应用上执行非本意的操作的攻击方法
它首先引导用户访问一个危险网站,当用户访问网站后,网站会发送请求到被攻击的站点,这次请求会携带用户的cookie发送,因此就利用了用户的身份信息完成攻击
防御CSRF:
1. 不使用cookie
2. 为表单添加校验的token字段
3. cookie中使用samesite字段 strict none lax
4. 服务器检查referer字段
21.https 验证身份也就是 TSL/SSL 身份验证的过程
1. 客户端请求服务器,并告诉服务器自身支持的加密算法以及密钥长度等信息
2. 服务器响应公钥和服务器证书
3. 客户端验证证书是否合法,然后生成一个会话密钥,并用服务器的公钥加密密钥,把加密的结果通过请求发送给服务器
4. 服务器使用私钥解密被加密的会话密钥并保存起来,然后使用会话密钥加密消息响应给客户端,表示自己已经准备就绪
5. 客户端使用会话密钥解密消息,知道了服务器已经准备就绪。
6. 客户端和服务器使用会话密钥加密信息传递消息
22.为什么使用CA机构对证书签名?
主要是为了解决证书的可信问题。如果没有权威机构对证书进行签名,客户端就无法知晓证书是否是伪造的,从而增加了中间人攻击的风险,https 就变得毫无意义。
23.身份验证过程中会涉及到密钥,对称加密,非对称加密,摘要的概念,请解释一下
密钥
密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥,分别应用在对称加密和非对称加密上。
对称加密
对称加密又叫做私钥加密,即信息的发送方和接收方使用同一个密钥去加密和解密数据。对称加密的特点是算法公开、加密和解密速度快,适合于对大数据量进行加密,常见的对称加密算法有 DES、3DES、TDEA、Blowfish、RC5 和 IDEA。
非对称加密
非对称加密也叫做公钥加密。非对称加密与对称加密相比,其安全性更好。对称加密的通信双方使用相同的密钥,如果一方的密钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对密钥,即公钥和私钥,且二者成对出现。私钥被自己保存,不能对外泄露。公钥指的是公共的密钥,任何人都可以获得该密钥。用公钥或私钥中的任何一个进行加密,用另一个进行解密。
摘要
摘要算法又称哈希/散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用 16 进制的字符串表示)。算法不可逆。
24.webSocket协议是什么?
webSocket是H5带来的新特性,相对于http来说,它是一个持久连接的协议。它利用 http 协议完成握手,然后通过 TCP 连接通道发送消息,使用 websocket 协议可以实现服务器主动推送消息。
首先,客户端若要发起 websocket 连接,首先必须向服务器发送 http 请求以完成握手,请求行中的 path 需要使用`ws:`开头的地址,请求头中要分别加入`upgrade、connection、Sec-WebSocket-Key、Sec-WebSocket-Version`标记
然后,服务器收到请求后,发现这是一个 websocket 协议的握手请求,于是响应行中包含`Switching Protocols`,同时响应头中包含`upgrade、connection、Sec-WebSocket-Accept`标记
当客户端收到响应后即可完成握手,随后使用建立的 TCP 连接直接发送和接收消息。
25.webSocket 与传统的 http 有什么优势
当页面中需要观察数据的变化(聊天)时,
第一种:短轮询。即客户端每隔一段时间就向服务器发送消息,询问有没有新的数据
第二种:长轮询,发起一次请求询问服务器,服务器可以将该请求挂起,等到有新消息时再进行响应。响应后,客户端立即又发起一次请求,重复整个流程。
无论是哪一种方式,都暴露了 http 协议的弱点,即响应必须在请求之后发生,服务器是被动的,无法主动推送消息。而让客户端不断的发起请求又白白的占用了资源。
websocket 的出现就是为了解决这个问题,它利用 http 协议完成握手之后,就可以与服务器建立持久的连接,服务器可以在任何需要的时候,主动推送消息给客户端,这样占用的资源最少,同时实时性也最高。
26.如何劫持https的请求
https有防篡改的特点,只要浏览器证书验证过程是正确的,很难在用户不察觉的情况下进行攻击。但若能够更改浏览器的证书验证过程,便有机会实现https中间人攻击。
所以,要劫持https,首先要伪造一个证书,并且要想办法让用户信任这个证书,可以有多种方式,比如病毒、恶意软件、诱导等。一旦证书被认证后,就可以利用普通中间人攻击的方式,使用伪造证书进行攻击。
27.如何解决跨域问题
1. 使用jsonp方案
在需要跨域请求时,事先准备好一个处理服务器数据的函数,然后生成一个`<script>`元素,`src`指向跨域站点,同时把准备好的函数名通过地址参数传递到服务器。
事先准备好处理数据的脚本,当客户端收到脚本后会运行事先准备的函数,从而实现跨域获取数据。
JSONP 实现简单、兼容性好,但缺点也很明显,它只支持 get 请求,同时也有安全性问题,并且对服务器端代码侵入性比较强。
2. 使用cors
服务端setHeaders(Access-Control-Allow-Origin: ‘*’)
简单请求和非简单请求
3. websocket
4. 服务器代理
5. nginx代理
6. iframe
28.前端如何实现即时通信
1. 短轮询。即客户端每隔一段时间就向服务器发送消息,询问有没有新的数据。
2. 长轮询。发起一次请求询问服务器,服务器可以将该请求挂起,等到有新消息时再进行响应。响应后,客户端立即又发起一次请求,重复整个流程。
3. websocket。握手完毕后会建立持久性的连接通道,随后服务器可以在任何时候推送新消息给客户端
29。HTTP常用状态码 301 302 304 403
301:永久重定向。浏览器会把重定向后的地址缓存起来,将来用户再次访问原始地址时,直接引导用户访问新地址
302:临时重定向。浏览器会引导用户进入新地址,但不会缓存原始地址,下一次用户访问原始地址,浏览器仍然会请求原始地址的服务器
304:资源未修改。服务器通过该状态码告诉客户端,请求的资源和过去一样,并没有任何变化,建议自行使用过去的缓存。通常,304 状态码的响应中,服务器不会附带任何的响应体。
403:不允许访问。服务器通过状态码告知客户端,这个资源目前不允许访问。这种状态码通常出现在权限不足的情况下。
30.浏览器输入url地址,并按下回车键后,发生了什么?
1. 浏览器自动补全协议和端口号,如果地址不合法,则执行默认引擎搜索
2. 浏览器根据url地址查找本地缓存,根据缓存规则查看是否命中缓存,若命中缓存,则直接使用缓存,不再发出请求
- 如果是https,先去找Service Worker,查看是否有离线缓存
- 如果没有,再找浏览器的内存缓存(memory cache)
- 如果还没有,再找硬盘缓存(disk cache):强缓存(expires和cache-control:max-Age) 和 协商缓存(Etag/if-None-match,Last-Modified / If-Modified-Since)
- 如果还没找到,请求是http2的情况下,再找找看有没有推送缓存(push cache),也就是session
3. 通过DNS解析找到服务器的IP地址
- 先递归查询有没有dns缓存,如果没有则进行迭代查询获得IP地址
- 首先,根据dns根域名(.)服务器查询,返回顶级域名服务器IP
- 再根据返回的IP去顶级域名(.com)服务器查询,返回权威域名服务器IP(xxx.com)
- 再根据返回的IP去权威域名(xxx.com)服务器查询,返回解析到的服务器IP
- 如果配置了CDN的话,权威域名服务器会返回一个CName别名记录,它指向CDN网络中的负载均衡系统, 然后通过智能算法,返回最佳节点的IP
4. 建立TCP连接
- 三次握手:第一次客户端发送syn=1和一个初始化序列号seq=x;第二次服务端返回ACK=1,SYN=1,ack=x+1,seq=y 第三次握手,ACK=1,ack=y+1,seq=x+1
- 如果是https,则多了一个TLS建立过程:
1. 客户端给服务器发送支持的加密方法列表和TLS版本,以及一个随机字符串
2. 服务器返回加密方法,TLS版本号,数字证书以及一个随机字符串
3. 客户端验证数字证书,确保服务器的合法性:检查数字签名,检查证书有效期,检查证书是否撤销
4. 验证完合法性后,客户端向服务器发送另一个随机字符串,这个字符串是由服务器的公钥加密的,只有对应的私钥才可以解开
5. 服务器使用私钥解开字符串
6. 现在客户端和服务器都拥有三个随机字符串,通过相同的算法生成相同的会话密钥
7. 使用会话密钥进行双方通信
5. 浏览器决定要附带哪些cookie到请求头中
6. 浏览器自动设置好请求头、协议版本、cookie,发出GET请求
7. 服务器处理请求,返回一个HTTP响应报文给浏览器
8. 浏览器根据使用的协议版本以及Connection字段决定是否保留TCP连接
9. 浏览器根据响应状态码决定如何处理这一响应:
1. 1xx 信息状态码 100 继续 101 切换协议
2. 2xx 成功状态码 200 成功 204 请求成功,但没有资源返回 206 需要下载文件,由用户决定是否下载
3. 3xx 重定向状态 301 永久重定向 302 临时重定向 304 调用缓存,不必重新请求数据
4. 4xx 客户端错误码 400 请求的语法存在错误 401 未授权 403 服务器拒绝访问 404 服务器无法找到请求的URL
5. 5xx 服务器错误状态 500 服务器内部出错 502 错误网关 503 服务器正在维护 504 请求超时
10. 浏览器根据响应头中的Content-Type字段识别响应类型,如果是text/html,则对响应体的内容进行HTML解析
11. DOM树构建
- html解析器进行html解析,对字符词法分析,将字符解析成token,对token进行语法分析,转成DOM节点对象并定义属性和规则。
- html解析器会维护一个解析栈,栈底为document,也就是DOM树的根节点。然后根据节点关系将节点依次推入栈中,形成DOM树。
- 如果解析过程中遇到没有async或defer的script标签引用时,会暂停解析,同时加载文件,执行响应的代码,代码执行完之后再返回渲染引擎继续渲染流程
- 在解析过程中还会触发一系列的事件,当DOM树完成后会触发DOMContentLoaded事件,当所有资源加载完毕后会触发load事件
12. CSSOM树构建
- 首先将CSS进行格式化成StyleSheets,然后对计算好的样式进行标准化操作。
- 样式计算规则主要有继承和层叠。计算阶段就是计算出DOM树中的每个节点的位置信息、样式数据、文本节点数据,然后CSS和HTML可以同时解析,但是CSS会阻塞JS
13. layout布局
- 首先创建布局树,遍历DOM中的节点,将可见节点添加到布局树中,然后根据DOM结构和元素样式对布局树中节点的几何位置信息计算
13. 分层
因为脱离了文档流的对象会形成一个层叠上下文,所以有了分层的概念。就类似于PS中的图层,然后主线程为每个图层进行计算样式,把每一个图层的绘制拆分成很多小的绘制指令,生成绘制表。
14. 栅格化
一个图层可能很大,进行分块。另外渲染引擎维护了一个栅格化线程,合成线程将分割好的图块发给栅格化线程,然后分别栅格化每个图块,再将栅格化之后的图块存储在`GPU内存`中
15. 合成和显示
31.HTTPS握手
1. 客户端请求服务器,并告诉服务器自身支持的加密方法列表以及密钥长度等信息
2. 服务器响应公钥和数字证书
3. 客户端验证证书的合法性,然后生成一个会话密钥,并用服务器的公钥加密密钥,把加密结果发给服务器
4. 服务器使用私钥解密被加密的会话密钥并保存起来,然后使用会话密钥加密消息发给客户端,表示已经准备就绪
5. 客户端使用会话密钥解密,
6. 后续客户端和服务器都使用会话密钥进行通信
32.http1.0 http2.0 http3.0之间的区别
http1.0:
1. 无法复用连接,每次请求完都会断开连接
2. 队头阻塞,如果一个请求被某种原因阻塞了,会导致后续请求无法发送
http2.0:
1. 二进制分帧:每帧有自己的标识序号,同一个ID的流的帧重新组合成完整的数据报文
2. 多路复用:基于二进制帧,不再有队头阻塞问题
3. 头部压缩:通过字典的形式,通过索引获取头部信息,减少了头部的数据量,从而实现更小的传输量
4. 服务器推送:允许服务器直接推送消息给客户端,无须客户端发送请求
http3.0:
1. 放弃TCP,采用UDP
2. 使用QUIC协议
33.cookie/sessionStorage/localStorage的区别
cookie,sessionStorage,localStorage都是本地数据的存储方式
1. 发送请求时,会自动携带cookie到请求头中,预防CSRF攻击 存储大小只有4K 有效期
2. sessionStorage有效期是长期的,但是窗口关闭会清除数据
3. localStorage持久化存储,存储空间5M
34.post请求什么时候用form data 什么时候用request payload
form data 适合传递简单的键值对信息,由于传递的信息比较扁平,难以传递深层次嵌套的数据
request payload 适合传递任意格式的数据,包括单个数字、布尔、深层次嵌套的对象、数组等,但 request payload 不适合传递文件数据
在前后端分离的项目中,对于非文件数据的传递,都推荐使用 request payload 的形式,以传递最明确的数据类型和数据结构,而对于文件上传,则推荐使用传统的 form data
35.http常见请求方法有哪些?
- GET,表示向服务器获取资源
- POST,表示向服务器提交信息,通常用于产生数据
- PUT,表示希望修改服务器的数据,通常用于修改数据
- DELETE,表示希望删除服务器的数据
- OPTIONS,发生在跨域中的预检请求,表示客户端向服务器申请跨域请求
- TRACE,回显服务器收到的请求,主要用于测试和诊断
- CONNECT,建立连接管道,
36.列举网络性能优化的方法
- 优化打包体积
- 多目标打包
- 压缩
- CDN
- 缓存
- http2
- defer,async
- prefetch,preload