HTTPS是有状态还是无状态的?

16

我想要澄清一下HTTPS是有状态还是无状态的问题?这个问题是关于我构建的RESTful API的。我们最初使用的是HTTP,由于HTTP基本上是在无状态的TCP/IP上运作,因此HTTP是无状态的,但是当我切换到HTTPS后,我的API变成了有状态的。我想知道我的结论,即HTTPS是有状态的,是否正确? 我使用一个名为webMethods的中间件工具创建了我的API。 谢谢。


3
HTTPS和HTTP一样都是无状态的。 - Michael Berkowski
3
你在说“它变成了有状态的”是什么意思?你需要解释一下这对你来说意味着什么。 - Todd A. Jacobs
https://blog.wimtenbrink.nl/2017/12/29/how-ssl-is-failing/ - firstpostcommenter
5个回答

31

TLS/SSL是有状态的。 Web服务器和客户端(浏览器)缓存会话,包括加密密钥,以提高性能,并且不为每个请求执行密钥交换。

HTTP 1是无状态的。 然而,HTTP/2定义了许多有状态的组件,但“应用层”仍然保持无状态。

简而言之:传输通道(TLS)是有状态的,原始HTTP是无状态的。

附注:Cookie和其他有状态机制是在单独的RFC中定义的后期添加。它们不是原始HTTP / 1.0规范的一部分,尽管其他有状态机制(如缓存和HTTP验证)在HTTP 1.1 RFC和RFC 2617中进行了定义。HTTP 1被认为是无状态的,尽管在实践中,我们使用标准化的有状态机制。HTTP/2在其标准中定义有状态的组件,因此具有状态。特定的HTTP/2应用程序可以使用HTTP/2功能的子集来维护状态的无状态性。

理论上,实践中您在日常生活中有状态地使用HTTP。


9
HTTPS中的S表示传输层加密,而非协议。HTTP协议在HTTPS中的语义保持不变。维基百科关于HTTPS的文章指出:

严格来说,HTTPS并不是一种单独的协议,而是使用加密的SSL/TLS连接传输普通的HTTP协议。

HTTP协议本身是无状态的,这是其设计如此,而不是因为它最常用于TCP/IP(例如,您完全可以使用UDP上的HTTP)。

3

HTTPS是在安全连接上的HTTP。

HTTP是比连接更高级的层次。

当连接到Web服务器时,您的连接类型可能总是TCP/IP。因此,如果通过HTTPS访问网站,则TCP/IP连接将被加密。

服务器和/或客户端发送的数据未经过服务器和/或客户端加密。它只是通常通过HTTP发送,但这次使用通过加密保护的TCP/IP连接。

如果数据是车辆,连接是高速公路,那么: - 使用HTTP就像车辆行驶在高速公路上,每个人都可以看到它们; - 使用HTTPS就像相同,但车辆通过隧道或任何防止不在高速公路上的人看到它们的东西。您可以确定有交通,但除了在隧道的两端外,无法识别车辆。

我认为这是背后发生的事情近似的形象。但我不是专家。我希望它能帮助。


-2

HTTP和HTTPS都是无状态协议。 HTTPS中的S代表安全,它指的是在加密的SSL/TLS连接上使用普通的HTTP。

使用JWT令牌或传统的使用cookie建立会话的方式可以帮助我们克服HTTP作为无状态协议的问题,因为它使服务器能够验证客户端的身份,这样您就不需要每次单击链接导航到网页时都要登录。

例如,当您登录银行网站时,它只会要求您输入登录详细信息一次。一旦您登录成功,当您导航到账户设置页面时,您就不需要重新输入它们,这是因为银行网站能够使用JWT令牌验证您的身份。

JWT令牌仅用于HTTPS而不是HTTP,因为在HTTPS中连接是加密的,因此无法被任何人拦截。

因此,HTTP和HTTPS都是无状态协议,但JWT令牌提供了解决方法。


-2

我认为HTTPS是一种有状态协议,因为它包含会话标识字段。这个字段最初由服务器生成,用于识别与所选客户端的会话。


状态性是一个备受讨论的话题,相关链接很多。 - Jeff Brateman
阅读了最受欢迎的答案后,我仍然有疑问。尽管我知道我错了,在我的想法中,HTTPS是有状态的,因为客户端/服务器建立连接,更改密钥,然后开始数据传输...我错过了什么? - guilhermecgs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接