我想弄清楚 HTTPS 是有状态的还是无状态的?这是关于我构建的 RESTful API 的。我们最初使用的是 HTTP。由于 HTTP 本质上是通过无状态的 TCP/IP 工作的,因此 HTTP 是无状态的,但是当我切换到 HTTPS 时,我的 API 变得有状态。我想知道我的结论是否 HTTPS 是有状态的。正确与否?我使用名为 webMethods 的中间件工具创建了我的 API。谢谢
5 回答
TLS/SSL is stateful. The web server and the client (browser) cache the session including the cryptographic keys to improve performance and do not perform key exchange for every request.
HTTP 1 is not stateful. HTTP/2 however defines many stateful components, but the "application layer" still remains stateless.
TL;DR: The transport pipe (TLS) is stateful, original HTTP is not.
Additional note: Cookies and other stateful mechanisms are later additions defined in separate RFC's. They are not part of the original HTTP/1.0 specification, although other stateful mechanisms like caching and HTTP auth are defined HTTP 1.1 RFC and RFC 2617. HTTP 1 is said to be stateless although in practice we use standardized stateful mechanisms. HTTP/2 defines stateful components in its standard and is therefore stateful. A particular HTTP/2 application can use a subset of HTTP/2 features to maintain statelessness.
Theory aside, in practice you use HTTP statefully in your everyday life.
HTTPS 中的 S 与传输有关,而不是协议。HTTP 协议的语义对于 HTTPS 保持不变。正如维基百科上关于 HTTPS 的文章所述,
严格来说,HTTPS 并不是一个单独的协议,而是指在加密的 SSL/TLS 连接上使用普通 HTTP。
而且 HTTP 协议在设计上是无状态的,并不是因为它最常通过 TCP/IP 使用(例如,没有什么能阻止您使用基于 UDP 的 HTTP)。
HTTPS 是基于安全连接的 HTTP。
HTTP 比连接更高级别。
连接到 Web 服务器时,您的连接(可能总是?)类型为 TCP/IP。因此,如果您通过 HTTPS 访问网站,您的 TCP/IP 连接将被加密。
服务器和/或客户端发送的数据没有被服务器和/或客户端加密。它只是通过 HTTP 发送的,但这次使用的是通过 TCP/IP 的连接,该连接通过加密保护。
如果数据是车辆,而连接是高速公路,那么: - 使用 HTTP 就像在高速公路上行驶的车辆,每个人都可以看到它们;- 使用 HTTPS 也一样,但车辆会通过隧道或任何阻止不在高速公路上的人看到它们的东西。您可以确定有交通,但您无法识别车辆,除了在隧道的两端。
我相信这是一个接近幕后发生的事情的图像。但我不是专家。我只是希望它有所帮助。
我相信 HTTPS 是一个有状态的协议,因为它包含会话标识符字段。它最初由服务器生成,用于识别与所选客户端的会话。
HTTP 和 HTTPS 都是无状态协议。HTTPS 中的S代表 Secure,它指的是通过加密的 SSL/TLS 连接使用普通 HTTP。
使用 JWT 令牌或使用 cookie 建立会话的传统方式帮助我们克服 HTTP 作为无状态协议的问题,因为它使服务器能够验证客户端的身份,因此您无需每次都登录您单击链接以在网页上导航。
因此,例如,当您登录银行的网站时,它只要求您输入一次登录详细信息。登录后,您无需在导航到帐户设置页面时重新输入它们,这是因为银行网站能够使用 JWT 令牌验证您的身份。
JWT token 只用在 HTTPS 上,不能用在 HTTP 上,因为连接是用 HTTPS 加密的,所以不能被任何人截获。
因此,HTTP 和 HTTPS 都是无状态协议,但 JWT Tokens 为它提供了一种解决方法。