# HTTP 长连接

# Http 长连接

在 HTTP/1.0 中默认使用短连接。也就是说,客户端和服务器每进行一次 HTTP 操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个 HTML 或其他类型的 Web 页中包含有其他的 Web 资源(如 JavaScript 文件、图像文件、CSS 文件等),每遇到这样一个 Web 资源,浏览器就会重新建立一个 HTTP 会话。

而从 HTTP/1.1 起,默认使用长连接,用以保持连接特性。使用长连接的 HTTP 协议,会在响应头加入这行代码: 在 Request Headers 中可以看到。

Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输 HTTP 数据的 TCP 连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive 不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如 Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

HTTP 协议的长连接和短连接,实质上是 TCP 协议的长连接和短连接。

# node 实践

浏览器并发连接为 6 个连接,如果超过 6 个,其他的会等前面的关闭,就会发送请求,可以在浏览器中打开 Connection ID 查看每个连接是不是复用的;

'Connection': 'close' 为关闭常连接,每次发送完请求后,就直接关闭 TCP 连接,再次发送请求的时候再进行 TCP 连接。

const http = require('http')
const fs = require('fs')
http.createServer(function(req, res) {
  const html = fs.readFileSync('test.html', 'utf-8')
  const img = fs.readFileSync('1.png')
  if (req.url === '/') {
    res.writeHead(200, {
      'Content-Type': 'text/html',
      'Connection': 'close'
    })
    res.end(html)
  } else {
    res.writeHead(200, {
      'Content-Type': 'image/png',
      'Connection': 'close'
    })
    res.end(img)
  }
}).listen(8888)

评 论:

更新: 11/21/2020, 7:00:56 PM