http和http2的区别(代码示例)

2021/1/10 11:33:22代码块nodejs

http:


const http = require('http')
const iconv = require('iconv-lite')
const URL = require('url')
let url = 'https://www.baidu.com'

let req = http.request({
    host: URL.parse(url).host,
    port: URL.parse(url).port || 80,
    method: 'GET',
    path: url,
    headers: {
    	referer: url
    },
    timeout: 30000
}, res => {
  	let encoding = res.headers['content-type'].match(/charset=([^;,\s]+)/i)[1]
    let body = []
    res.on('data',chunk=>{
    	body.push(chunk)
    })
    res.on('end',()=>{
      let chunkall = Buffer.concat(body)
      body = iconv.decode(chunkall, encoding)
			console.log(body)
    })
})
req.end()

http2:

const http2 = require('http2')
const iconv = require('iconv-lite')
const URL = require('url')
let url = 'https://www.baidu.com'

const client = http2.connect(url, {})
    .on('error', (err) => console.error(err))
    .on('socketError', (err) => console.error(err))

let encoding = 'utf-8'
let headers = {
    ':authority': URL.parse(url).host,
    ':method': 'GET',
    ':scheme': URL.parse(url).protocol,
    ':path': URL.parse(url).path,
    'referer': url
}

const req = client.request(headers)

req.on('response', (headers) => {
  	let type = headers['content-type']
  	if(type){
      let result =type.match(/charset=([^;,\s]+)/i)
      if(result){
      	encoding = result[1]
      }
    }
})

//req.setEncoding('utf8')
let body = []
req.on('data', (chunk) => {
    body.push(chunk)
})
req.on('end', () => {
    let chunkall = Buffer.concat(body)
    body = iconv.decode(chunkall, encoding)
		console.log(body)
    client.close()
})
req.end()