likes
comments
collection
share

古老访谈问题——输入URL到页面成功加载,底层解析检查HSTS列表 HSTS(HTTP Strict Transport

作者站长头像
站长
· 阅读数 18

检查HSTS列表

HSTS(HTTP Strict Transport Security)是一种安全策略,它允许网站强制要求浏览器仅使用 HTTPS 连接来与其通信。启用 HSTS 后,浏览器会自动将所有对该网站的 HTTP 请求重定向为 HTTPS 请求,从而增加了安全性,防止了中间人攻击(MITM)和 SSL 剥离攻击(SSL stripping)。

  • 浏览器检查其“预加载的HSTS(HTTP 严格传输安全)” 列表。这是已请求通过以下方式联系的网站列表 仅限 HTTPS。
  • 如果网站在列表中,浏览器将通过 HTTPS 发送其请求 而不是 HTTP。否则,初始请求将通过 HTTP 发送。 (请注意,网站仍然可以使用 HSTS 策略,而无需在 HSTS 列表。用户对网站的第一个 HTTP 请求将收到一个 请求用户仅发送 HTTPS 请求的响应。然而,这 单个 HTTP 请求可能会使用户容易受到降级攻击,这就是现代 Web 中包含 HSTS 列表的原因 浏览器。

简单来说就是如果用户没有指明输入指定http还是https协议时,浏览器将会去审查HSTS预加载列表,如果该网址在列表内部则直接使用https请求直接发出,如果不在,则先使用http协议请求来申请访问,如果该网站支持HSTS协议,则将在HSTS预加载列表加入这个网址,并且之后都是用HTTPS协议请求

DNS查询

DNS 查询(Domain Name System Query)是指客户端(如浏览器或应用程序)向 DNS 服务器发送请求以获取特定域名的 IP 地址的过程。DNS 查询是互联网中域名解析的关键步骤,它使得用户可以通过易于记忆的域名来访问网站和其他网络资源。

当我们拿到了网址框内完整的url后,我们便将开始去解析这段url去获取到它的唯一IP地址,这段操作也被称为DNS解析

基本流程是:客户端会向本地 DNS 解析器发送一个 DNS 查询请求,询问该域名对应的 IP 地址。本地 DNS 解析器首先检查其缓存中是否已经有该域名的 IP 地址记录。如果有,则直接返回结果;如果本地 DNS 解析器没有缓存记录,则会向根域名服务器发起查询,如果有,则直接返回结果;如果没有,根域名服务器会提供指向顶级域名(TLD)服务器的地址。本地 DNS 解析器根据根域名服务器提供的信息,向相应的顶级域名服务器发起查询,顶级域名服务器会提供指向权威域名服务器的地址。最后,本地 DNS 解析器向权威域名服务器发起查询,权威域名服务器拥有最终的域名记录,并将 IP 地址返回给本地 DNS 解析器。

# IP
- (找)DNS解析 -> 寻找哪台机器上有你需要资源 根据网址找IP
    1. 到本地域名服务器查找对应的IP
    2. 到根域名服务器查找对应的IP
    3. com顶级域名服务器查找对应的IP
    4. 目标服务器查找对应的IP
    5. 将IP写入本地DNS缓存

古老访谈问题——输入URL到页面成功加载,底层解析检查HSTS列表 HSTS(HTTP Strict Transport

TCP协议——三次握手,建立连接

  1. 第一次握手(Syn):

    • 客户端向服务器发送一个带有SYN标志位的数据包,并设置一个初始序列号(sequence number),表示希望开始一个连接。此时客户端处于SYN-SENT状态。
  2. 第二次握手(Syn-Ack):

    • 服务器接收到客户端的SYN数据包后,会回应一个带有SYNACK标志位的数据包,同时也会包含自己的初始序列号以及对客户端序列号的确认(acknowledgment number)。此时服务器处于SYN-RECEIVED状态。
  3. 第三次握手(Ack):

    • 客户端接收到服务器的SYN+ACK数据包之后,会发送一个带有ACK标志位的数据包给服务器,用来确认收到了服务器的SYN信息。此时,客户端和服务器都进入ESTABLISHED状态,表示连接已经成功建立,可以开始进行双向通信了。

古老访谈问题——输入URL到页面成功加载,底层解析检查HSTS列表 HSTS(HTTP Strict Transport

https与http

目前使用的https与http都基于HTTP2.0版本的协议实现的,为什么说https的安全性更高呢?

主要是https使用了TLS 协议

对称加密

对称加密是指加密和解密都使用同一个密钥的加密方式。这种方式速度快,适合大量数据的加密。但是对称加密面临容易被第三方截获,从而导致数据被截取。

非对称加密

非对称加密使用一对密钥,即公钥和私钥。公钥可以公开分享,而私钥则需要保密。任何使用公钥加密的数据只能由持有相应私钥的人解密。非对称加密通常较慢且更适合于加密少量的数据。

TLS协议同时使用了对称加密与非对称加密来加密数据,因此安全性更加可靠。

简单理解为:

客户端发送`ClientHello`消息,告诉服务器它支持哪些加密套件。
服务器选择一个加密套件,并发送`ServerHello`消息。
服务器发送证书,其中包含它的公钥。
客户端生成一个预主密钥(pre-master secret),这是用于生成最终会话密钥的基础材料。
客户端使用从服务器证书中获取的公钥,对预主密钥进行加密,并将其发送给服务器。
服务器使用自己的私钥,对收到的加密预主密钥进行解密。
客户端和服务端各自独立地使用预主密钥和一些握手过程中产生的随机数,通过相同的算法计算出会话密钥。
双方开始使用对称加密算法和这个会话密钥,来加密和解密后续的数据交换。

拿到数据包开始解析

连接成功后拿到数据包解析HTML等网页资源文件,这里放用原来的文章就不叙述了

TCP协议——四次挥手,断开连接

最后用户访问结束这个网页进程关闭程序后,TCP连接断开:

  • 四次挥手 -- 断开连接

    1. 客户端向服务端发送断开连接请求,客户端进入FIN-WAIT-1状态
    2. 服务端收到断开连接请求后,向客户端发送断开连接确认,服务端进入CLOSE_WAIT状态
    3. 服务端如果存在没有发送完毕的数据,会继续发送给客户端,进入到LAST_ACK状态
    4. 客户端接收到服务端的统一断开连接的应答,客户端进入CLOSE_WAIT状态,等待2MSL时间,并向服务端发送确认应答。

    在2MSL时间内,自动进入CLOSE状态,服务端在接受到客户端的确认答应后也进入CLOSE状态,完成四次挥手。

补充

  • http对头阻塞:再一个tcp连接中,存在多个HTTP请求,前一个HTTP请求没有结束没有被返回,后一个请求就无法发送,这样就会造成HTTP请求头阻塞,导致请求无法被处理。 这个问题存在于HTTP1.1版本,在http2.0中已经被解决了。

  • 多路复用

    1. 打造了一个二进制分帧层,将多个请求利用二进制分帧层处理成一帧一帧的请求,每一帧带上了相应的编号,服务端接收到所有的帧后会根据相同的id合并成一个完整的请求。 服务器处理响应该请求,将响应头和响应体发送至二进制分帧层,浏览器接收到响应帧后自行合并成一个完整的响应。
    2. 多路复用中可以给重要的请求设置优先级,优先级高的请求会优先回应。
    3. 同时只能最多开启一条TCP连接
转载自:https://juejin.cn/post/7411037528638930953
评论
请登录