首先http中,没有长连接这样的类型。
http要实现长连接,是建立在tcp协议的基础上的。
一个http连接,等到不再需要该连接的时候,主动调用该连接的close()方法,才会关闭该连接。
HTTP短连接:
客户端和服务端进行一次HTTP请求/响应之后,就关闭连接。下一次的HTTP请求/响应操作需要重新建立。在首部字段中设置Connection:close,则在一次请求/响应之后,就会关闭连接。
HTTP长连接:
客户端和服务端建立一次连接之后,可以在这条连接上进行多次请求/响应操作。持久连接可以设置过期时间,也可以不设置。在首部字段中设置Connection:keep-alive 和 Keep-Alive:timeout = 60,表明连接建立之后,空闲时间超过60秒,连接失效。如果在空闲第58秒使用此连接,则仍然有效,并且使用完之后,重新计数空闲时间,空闲60秒无再使用,连接失效。设置HTTP长连接,无过期时间,在首部字段中只设置Connection:keep-alive,表明连接永久有效。
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。
Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。
实现长连接要客户端和服务端都支持长连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。