mewcoder / feroad

前端精进之路 网站
https://feroad.tech
4 stars 0 forks source link

网络/浏览器面试题 #3

Open mewcoder opened 7 months ago

mewcoder commented 7 months ago
mewcoder commented 7 months ago

http 头部有哪些

mewcoder commented 7 months ago

Cookie

主要用于,会话状态管理,用户跟踪。 缺点:

第三方 Cookie 的问题:

mewcoder commented 7 months ago

CSRF

跨站请求伪造

攻击者利用 HTTP 请求会自动携带 cookie 的特定,利用用户的登陆状态发送恶意请求。

方法:自动发起 get/post 请求;诱导点击

CSRF 的过程:

防御方法::

https://zhuanlan.zhihu.com/p/522562168

mewcoder commented 7 months ago

DNS 解析过程

DNS(Domain Name System,域名系统)是一个将域名和 IP 地址相互映射的分布式服务

一般我们向本地 DNS 服务器发送请求的方式就是递归查询,因为我们只需要发出一次请求,然后本地 DNS 服务器返回给我们最终的请求结果。而本地 DNS 服务器向其他域名服务器请求的过程是迭代查询的过程,因为每一次域名服务器只返回单次查询的结果,下一级的查询由本地 DNS 服务器自己进行。

mewcoder commented 7 months ago

HTTPS 的原理

HTTPS 其实就是 HTTP+TLS 的传输方式,TLS 叫传输层安全,之前叫 SSL(安全套接层)。

因为 HTTP 属于明文传输,可以被截取到。那么就需要对传输报文进行加密,加密方式有两种:非对称和对称。对称就是同一个密钥进行加密解密,非对称就是有一组公私密钥,可以互相加解密。

那么 TLS 是怎么做的呢?

因为非对称加密的效率不高,对 HTTP 报文一般采用对称加密,然后通过非对称加密传输这个会话密钥。

比如客户端生成一个会话密钥通过一个公钥加密,服务端通过私钥解密获得会话密钥,就可以安全地传输报文了。

但是这个公钥不能安全地传输到客户端手里,即使加密也需要对应的密钥进行传输,现在的通过 CA机构 解决这个密钥的信任问题。

  1. 服务端向 CA机构申请一个证书,这个证书,就是用 CA机构的私钥 加密过的 网站的公钥
  2. 然后客户端请求得到这个证书,通过预装在客户端的 CA机构的公钥 进行解密和验证签名,得到这个网站的公钥
  3. 简单的讲,客户端就可以生成一个会话密钥通过网站的公钥加密传输给服务端,服务端通过网站的私钥解密后就得到了这个会话密钥

但是,真实情况不是这个简单流程(RSA),有密钥交换算法,比如 ECDHE,在请求返回证书的过程,服务端和客户端会分别交互两个随机数,然后自个通过协商好的算法参数生成第三个随机数,再通过这个三个随机数生成会话密钥,这个密钥是不需要传输的,两边都知道,之后就可以加密传输了。

mewcoder commented 7 months ago

HTTP2 的特性

多路复用

为什么 HTTP/1.1 不能实现多路复⽤?

mewcoder commented 7 months ago

浏览器事件循环机制

JS 是单线程的,同时只能执行一项任务。但浏览器或者Node.js环境中存在着大量的I/O操作(如网络请求、定时任务等),如果同步执行的话就会阻塞,所以就有了异步任务的事件循环机制。

JS 会先执行当前任务,遇到异步任务就放入任务队列中,分为宏任务和微任务,当前宏任务执行完会处理所有的微任务,再从宏任务队列中取一个开始下一个宏任务。

宏任务:script 脚本

为什么浏览器定时器不准

mewcoder commented 7 months ago

requestAnimationFrame

指定回调函数是在浏览器下一次绘制之前执行,每秒60帧的话,大概是16.6ms 一次,可以用于动画