node-modules / urllib

Request HTTP(s) URLs in a complex world.
MIT License
724 stars 114 forks source link

http/2 agent 下会丢失 undici:client:sendHeaders 事件 #510

Open fengmk2 opened 1 month ago

fengmk2 commented 1 month ago
const agent = new Agent({
    allowH2: true,
  });
 const response = await request('https://registry.npmmirror.com', {
    dataType: 'json',
    timing: true,
    dispatcher: agent,
  });
  console.log(response.status, response.headers);
fengmk2 commented 1 month ago

http1

URLLIB:HTTPCLIENT 40679: Request#1 GET https://registry.npmmirror.com/, headers: {"user-agent":"node-urllib/VERSION Node.js/22.2.0 (OS X; arm64)","accept":"application/json"}, headersTimeout: 5000, bodyTimeout: 5000, isStreamingRequest: false
URLLIB:DIAGNOSTICSCHANNEL 40679: [undici:request:create] Request#1 GET https://registry.npmmirror.com, path: /, headers: [
  'user-agent',
  'node-urllib/VERSION Node.js/22.2.0 (OS X; arm64)',
  'accept',
  'application/json',
  [length]: 4
]
UNDICI 40679: connecting to registry.npmmirror.com using https:undefined
 ❯ test/options.dispatcher.test.ts (3)
 ❯ test/options.dispatcher.test.ts (3)
   ❯ options.dispatcher.test.ts (3)
     ↓ should work with proxyAgent dispatcher [skipped]
     ↓ should work with getGlobalDispatcher() dispatcher [skipped]
     ⠦ should work with http/2 dispatcher
URLLIB:DIAGNOSTICSCHANNEL 40679: [undici:client:connected] Socket#1 connected (sock: {
  localAddress: '172.16.21.213',
  localPort: 63220,
  remoteAddress: '61.160.192.98',
  remotePort: 443,
  attemptedAddresses: undefined,
  connecting: false
})
UNDICI 40679: sending request to GET https://registry.npmmirror.com//
URLLIB:DIAGNOSTICSCHANNEL 40679: [undici:client:sendHeaders] Request#1 send headers on Socket#1 (handled 1 requests, sock: {
  localAddress: '172.16.21.213',
  localPort: 63220,
  remoteAddress: '61.160.192.98',
 ❯ test/options.dispatcher.test.ts (3)
stdout | test/options.dispatcher.test.ts > options.dispatcher.test.ts > should work with http/2 dispatcher
200 {
  server: 'Tengine',
  'content-type': 'application/json; charset=utf-8',
  'content-length': '1245',
  connection: 'keep-alive',
  'strict-transport-security': 'max-age=5184000',
  date: 'Sat, 01 Jun 2024 02:26:42 GMT',
  vary: 'Origin',
  'request-id': '6262e3b0-1fbe-11ef-9fce-85275689f862',
  'x-frame-options': 'SAMEORIGIN',
  'x-xss-protection': '1; mode=block',
  'x-content-type-options': 'nosniff',
  'x-download-options': 'noopen',
  'x-readtime': '0.771',
  via: 'cn6425.l1, kunlun5.cn6425, l2cn3125.l2, cache58.l2cn3125, registry.npmmirror.com-06, cache58.l2cn3125[18,18,200-0,M], cache19.l2cn3125[19,0], kunlun5.cn6425[35,34,200-0,M], kunlun7.cn6425[35,0]',
  'ali-swift-global-savetime': '1717208802',
  'x-cache': 'MISS TCP_MISS dirn:-2:-2',
  'x-swift-savetime': 'Sat, 01 Jun 2024 02:26:42 GMT',
  'x-swift-cachetime': '0',
  'timing-allow-origin': '*',
  eagleid: '3da0c01117172088026575115e'
}

URLLIB:DIAGNOSTICSCHANNEL 40679: [undici:request:headers] Request#1 get 200 response headers on Socket#1 (handled 1 responses, sock: {
  localAddress: '172.16.21.213',
  localPort: 63220,
  remoteAddress: '61.160.192.98',
  remotePort: 443,
  attemptedAddresses: undefined,
  connecting: false
})
UNDICI 40679: trailers received from GET https://registry.npmmirror.com//
URLLIB:DIAGNOSTICSCHANNEL 40679: [undici:request:trailers] Request#1 get response body and trailers
URLLIB:HTTPCLIENT 40679: Request#1 got response, status: 200, headers: {"server":"Tengine","content-type":"application/json; charset=utf-8","content-length":"1245","connection":"keep-alive","strict-transport-security":"max-age=5184000","date":"Sat, 01 Jun 2024 02:26:42 GMT","vary":"Origin","request-id":"6262e3b0-1fbe-11ef-9fce-85275689f862","x-frame-options":"SAMEORIGIN","x-xss-protection":"1; mode=block","x-content-type-options":"nosniff","x-download-options":"noopen","x-readtime":"0.771","via":"cn6425.l1, kunlun5.cn6425, l2cn3125.l2, cache58.l2cn3125, registry.npmmirror.com-06, cache58.l2cn3125[18,18,200-0,M], cache19.l2cn3125[19,0], kunlun5.cn6425[35,34,200-0,M], kunlun7.cn6425[35,0]","ali-swift-global-savetime":"1717208802","x-cache":"MISS TCP_MISS dirn:-2:-2","x-swift-savetime":"Sat, 01 Jun 2024 02:26:42 GMT","x-swift-cachetime":"0","timing-allow-origin":"*","eagleid":"3da0c01117172088026575115e"}, timing: {"queuing":1.365,"connected":98.548,"requestHeadersSent":99.597,"requestSent":100,"waiting":160.441,"contentDownload":161.505}

http2

URLLIB:HTTPCLIENT 38523: Request#1 GET https://registry.npmmirror.com/, headers: {"user-agent":"node-urllib/VERSION Node.js/22.2.0 (OS X; arm64)","accept":"application/json"}, headersTimeout: 5000, bodyTimeout: 5000, isStreamingRequest: false
URLLIB:DIAGNOSTICSCHANNEL 38523: [undici:request:create] Request#1 GET https://registry.npmmirror.com, path: /, headers: [
  'user-agent',
  'node-urllib/VERSION Node.js/22.2.0 (OS X; arm64)',
  'accept',
  'application/json',
  [length]: 4
]
UNDICI 38523: connecting to registry.npmmirror.com using https:undefined
 ❯ test/options.dispatcher.test.ts (3)
   ❯ options.dispatcher.test.ts (3)
     ↓ should work with proxyAgent dispatcher [skipped]
     ↓ should work with getGlobalDispatcher() dispatcher [skipped]
     ⠦ should work with http/2 dispatcher
HTTP2 38523: Http2Session client: setting up session handle
HTTP2 38523: Http2Session client: sending settings
HTTP2 38523: Http2Session client: submitting settings
HTTP2 38523: Http2Session client: created
UNDICI 38523: connected to registry.npmmirror.com using https:h2
URLLIB:DIAGNOSTICSCHANNEL 38523: [undici:client:connected] Socket#1 connected (sock: {
  localAddress: '172.16.21.213',
  localPort: 62742,
  remoteAddress: '180.213.251.220',
  remotePort: 443,
  attemptedAddresses: undefined,
  connecting: false
})
HTTP2 38523: Http2Session client: initiating request
HTTP2 38523: Http2Session client: connected, initializing request
 ❯ test/options.dispatcher.test.ts (3)
 ❯ test/options.dispatcher.test.ts (3)
stdout | test/options.dispatcher.test.ts > options.dispatcher.test.ts > should work with http/2 dispatcher
200 {
  server: 'Tengine',
  'content-type': 'application/json; charset=utf-8',
  'content-length': '1275',
  'strict-transport-security': 'max-age=5184000',
  date: 'Sat, 01 Jun 2024 02:22:43 GMT',
  vary: 'Origin',
  'request-id': 'd3982be0-1fbd-11ef-8a4f-85203085f64a',
  'x-frame-options': 'SAMEORIGIN',
  'x-xss-protection': '1; mode=block',
  'x-content-type-options': 'nosniff',
  'x-download-options': 'noopen',
  'x-readtime': '0.912',
  via: 'cn4770.l1, kunlun12.cn4770, l2cn3137.l2, cache30.l2cn3137, npmmirror-x86-2022012802003, cache30.l2cn3137[40,39,200-0,M], cache62.l2cn3137[41,0], kunlun12.cn4770[54,54,200-0,M], kunlun8.cn4770[56,0]',
  'ali-swift-global-savetime': '1717208563',
  'x-cache': 'MISS TCP_MISS dirn:-2:-2',
  'x-swift-savetime': 'Sat, 01 Jun 2024 02:22:43 GMT',
  'x-swift-cachetime': '0',
  'timing-allow-origin': '*',
  eagleid: 'b4d5fb9c17172085630727029e'
}

HTTP2 38523: Http2Stream 1 [Http2Session client]: emitting stream 'response' event
UNDICI 38523: received response to GET https://registry.npmmirror.com// - HTTP 200
URLLIB:DIAGNOSTICSCHANNEL 38523: [undici:request:headers] Request#1 get 200 response headers on Unknown Socket
UNDICI 38523: trailers received from GET https://registry.npmmirror.com//
URLLIB:DIAGNOSTICSCHANNEL 38523: [undici:request:trailers] Request#1 get response body and trailers
URLLIB:HTTPCLIENT 38523: Request#1 got response, status: 200, headers: {"server":"Tengine","content-type":"application/json; charset=utf-8","content-length":"1275","strict-transport-security":"max-age=5184000","date":"Sat, 01 Jun 2024 02:22:43 GMT","vary":"Origin","request-id":"d3982be0-1fbd-11ef-8a4f-85203085f64a","x-frame-options":"SAMEORIGIN","x-xss-protection":"1; mode=block","x-content-type-options":"nosniff","x-download-options":"noopen","x-readtime":"0.912","via":"cn4770.l1, kunlun12.cn4770, l2cn3137.l2, cache30.l2cn3137, npmmirror-x86-2022012802003, cache30.l2cn3137[40,39,200-0,M], cache62.l2cn3137[41,0], kunlun12.cn4770[54,54,200-0,M], kunlun8.cn4770[56,0]","ali-swift-global-savetime":"1717208563","x-cache":"MISS TCP_MISS dirn:-2:-2","x-swift-savetime":"Sat, 01 Jun 2024 02:22:43 GMT","x-swift-cachetime":"0","timing-allow-origin":"*","eagleid":"b4d5fb9c17172085630727029e"}, timing: {"queuing":1.389,"connected":0,"requestHeadersSent":0,"requestSent":105.459,"waiting":202.344,"contentDownload":204.463}
HTTP2 38523: Http2Stream 1 [Http2Session client]: closed with code 0, closed false, readable false
HTTP2 38523: Http2Stream 1 [Http2Session client]: destroying stream