http1.1长连接


百度为例 Connection ID 就是tcp连接的id 可以看到确实是一个tcp对应多个请求
这是http1.1开始支持的
但是,一个tcp连接虽然可以发多个请求, 这些请求是串行的,有先后顺序
为了快,还是会多创建tcp连接 来并发

chrome允许一个域名6个TCP连接并发

头 keep-alive保证创建的不是短链接: 默认就是这个 长连接

http1.1长连接_第1张图片
请求头的

http1.1长连接_第2张图片
响应头的

除非自己手动加头, 'Connection': 'close'这样改成tcp连接处理完一个请求就关闭 不长连接

 response.writeHead(200, {
      'Content-Type': 'image/jpg',
      'Connection': 'close' 
    })

试验:chrome 同域名最多6个tcp连接

浏览器得到这个html以后再去请求者17张图片
图片我就返回同,但是url不同 还是会一个个请求 不会缓存




  
  
  
  Document


  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  


const http = require('http')
const fs = require('fs')

http.createServer(function (request, response) {
  console.log('request come', request.url)

  const html = fs.readFileSync('test.html', 'utf8')
  const img = fs.readFileSync('test.jpg')
  if (request.url === '/') {//返回html
    response.writeHead(200, {
      'Content-Type': 'text/html',
    })
    response.end(html)
  } else {
    response.writeHead(200, {//返回图片
      'Content-Type': 'image/jpg',
      'Connection': 'keep-alive' // or close
    })
    response.end(img)
  }

}).listen(8888)

console.log('server listening on 8888')

网速调慢不然太快了,就tcp连接复用了,不会创多个tcp连接了


http1.1长连接_第3张图片
网速调慢:Fast 3G
http1.1长连接_第4张图片
http1.1长连接_第5张图片

可以看到图片6的Waterfall前面灰了一段 要等

谷歌已用http2

http1.1长连接_第6张图片
都是11831

同一个tcp连接可以并行请求(原来是1.1是tcp复用,但是串行,一个接一个请求)
所以: 同域就对应同一个tcp连接(http1.1是只能串行,一个域6个tcp连接复用)就够了

你可能感兴趣的:(http1.1长连接)