我们都知道 HTTP 是无连接的。请求-响应之后,连接就会断开。它根据浏览器提供的 cookie 来记住“状态”。
HTTPS 也是这种情况吗?由于它通过 TLS/SSL 工作,连接是否持久?当我与网站交互时,我的系统是否会在整个过程中与服务器的端口 443 建立连接?如果是,那么服务器一次维护大量连接的开销是不是太大了?
我在读本教程并且对它的解释有点困惑。
答案1
我们都知道 HTTP 是无连接的
不,HTTP 是无国籍者。它仍然运行在面向连接的传输(通常是 TCP)之上,但它不会为该特定连接分配任何状态。客户端可以自由地将同一连接重新用于多个请求(许多 HTTP/1.1 客户端都是这样做的),或者为每个请求创建一个全新的连接(就像 HTTP/1.0 客户端曾经做的那样)。
(HTTP 本身既不是无连接的也不是面向连接的,因为维护连接是运输协议。TCP、SCTP、QUIC 是面向连接的传输,而 UDP 是无连接的。一些应用协议将状态与底层连接相关联;一些应用协议将所有相关状态放在自己的数据包中。
HTTPS 也是这种情况吗?由于它通过 TLS/SSL 工作,连接是否持久?
常规 HTTP 和基于 TLS 的 HTTPS 仍使用相同的传输 (TCP),并且都以相同的方式处理连接。TLS 只是 HTTP 和 TCP 之间的一个额外层。
当我与网站交互时,我的系统是否会在整个过程中与服务器的 443 端口建立连接?
大多数网络浏览器会重复使用相同的 1-2 个连接来请求所有必要的资源,但会在这些连接空闲几分钟后关闭它们。
答案2
http 和 https 在很大程度上都是无连接的 - 它们是无连接的,除非它们不是。HTTPS 只是对流进行了一些加密。
两者都可以对每个 TCP 连接处理 1 个请求,并且都可以允许您持久连接。
当然,如果您进行大量操作的话, https 开销是一个值得关注的问题(您说得对, https 的来回次数更多),但我想这就是反向代理的用途。