在处理了与cookie相关的问题之后。有些东西让我感到震惊。
为什么我们需要做所有这些维护cookie或会话数据的噱头? 想知道这是否如此常见,为什么这不能由系统默认完成? 我很懒...
但我记得我不会在很多地方维护会话数据。例如SSH。当我做ssh时我只是做ssh而且我已经连接了。我不会喜欢会话等所有细节。系统需要注意。 那我为什么要在网站上做这些事呢。
然后雅由福鲁赞开了大学网络书。开始阅读并发现http是无状态协议。 Ssh是有状态的。 啊......那我们为什么要使用http协议呢?如果不是为什么不使用其他有状态的协议..或者为什么我们不将http更改为有状态。我们这样做是否会失去一些东西?为什么不这样做?
我在很多地方搜索过但无法得到令人信服的答案。但是每个人都说这个“使http协议变得简单”。
我无法理解这是如何变得简单。我不知道通过保持http无状态来简化它的程度?
你能指导我一些能解释这个最终问题的书吗?通过保持无状态,可以简化多少http? 如果没有,你能否给出一个容易理解的答案,即使是一个6岁的孩子也能理解。
答案 0 :(得分:1)
AFAIK,主要原因是减少Web服务器的负载。就目前而言,当您建立HTTP连接时,Web服务器会处理您的请求,然后忘记您,这样就可以释放资源。如果HTTP是有状态的,则Web服务器必须维护(数百)个数千个同时连接,这将需要非常大的硬件资源。
答案 1 :(得分:1)
HTTP was originally intended for document access,通过HTML,这些文档可以相互链接。您连接到服务器,请求文档,下载它,服务器将关闭连接。
我不认为Tim Berners-Lee先生预见到我们现在拥有的基于HTTP的应用程序,这就是为什么有WebSockets和HTTP 2.0工作的人,他们试图减轻一些从HTTP的无国籍性质中产生的问题。
答案 2 :(得分:1)
值得注意的是,HTTP 1.0 / 1.1(默认值为1.1)有一个Connection: Keep-Alive
标头,可以保持TCP套接字为后续请求打开。在理论上,人们可以永久地保持套接字打开(至少直到它被打破或关闭,但没有超时),尽管他们需要注意资源的使用。 Apache会自动关闭TCP连接,但使用自定义服务器实现时,这不是问题。
来自Wikipedia: HTTP persistent connection:
缺点:
对于定期请求单个文档的服务(例如,图像托管网站),Keep-Alive可能会严重损害性能,因为在检索到文档后会保持不必要的连接打开几秒钟。
由于复杂性增加,持久连接更有可能暴露服务器,客户端和代理中的软件错误。
但是,它还指出:
优点:
降低CPU和内存使用量(因为同时打开的连接数较少)。
减少网络拥塞(减少TCP连接)。
减少后续请求的延迟(无握手)。
这些(dis)的优点已得到认可,这就是为什么这个东西被称为WebSocket。