作者:小林coding
计算机八股文网站:https://xiaolincoding.com

大家好,我是小林,昨晚有位读者又给我送素材来了。

他在面试字节,被问到这个问题:HTTPS 会加密 URL 吗?

答案是,会加密的。

因为 URL 的信息都是保存在 HTTP Header 中的,而 HTTPS 是会对 HTTP Header + HTTP Body 整个加密的,所以 URL 自然是会被加密的。

下图是 HTTP/1.1 的请求头部,可以看到是包含 URL 信息的。

对应的实际的 HTTP/1.1 的请求头部:

HTTP/1.1 请求的第一行包含请求方法和路径。HTTP/2 用一系列伪头部(pseudo-header)替换了请求行,这五个伪头部很容易识别,因为它们在名称的开头用了一个冒号来表示。

比如请求方法和路径伪头字段如下:

  • ":method" 伪头字段包含了 HTTP 方法;
  • ":path" 伪头字段包含目标 URL 的路径和查询部分;

如下图:

上图是我浏览器 F12 开发者工具查看的信息,浏览器显示信息是已经解密后的信息,所以不要误以为 URL 没有加密。

如果你用抓包工具,抓包 HTTPS 的数据的话,你是什么都看不到的,如下图,只会显示“Application Data”,表示这是一个已经加密的 HTTP 应用数据。

HTTPS 可以看到域名吗?

再问大家一个问题,HTTPS 可以看到请求的域名吗?

从上面我们知道,HTTPS 是已经把 HTTP Header + HTTP Body 整个加密的,所以我们是无法从加密的 HTTP 数据中获取请求的域名的。

但是我们可以在 TLS 握手过程中看到域名信息

比如下图,TLS 第一次握手的 “Client Hello” 消息中,有个 server name 字段,它就是请求的域名地址。

所以,用了 HTTPS 也不能以为偷偷在公司上某 hub 不会被发现

更多网络文章

网站:xiaolincoding.com

发表评论

邮箱地址不会被公开。 必填项已用*标注