undici icon indicating copy to clipboard operation
undici copied to clipboard

TypeError: fetch failed - on Node v20.11.1 and v21.7.1, but works on v18.19.1 - likely issue with resolving redirect URL or IPv6

Open gregonarash opened this issue 1 year ago • 0 comments

Bug Description

Making fetch request fails with TypeError and array of errors.

Originally this error showed up by breaking my NextJS project, when upgrading to Next v14. Digging through NextJS issues relating to TypeError: fetch failed I found out that this was relating to undici

Reproducible By

Executing below in command line (on Node v20.11.1 and v21.7.1)

node -e "fetch('https://airtable.com').then(res => console.log(res.status))"

will result in TypeError: fetch failed

Expected Behavior

Expected result is 200. For comparison:

  1. Executing below in command line
curl -s -o /dev/null -w "%{http_code}\n" https://airtable.com/

will result in 301

  1. Executing below in command line (on Node v18.19.1 )
node -e "fetch('https://airtable.com').then(res => console.log(res.status))"

will result in 200

  1. Fetching resolved URL with (www.) on Node v20.11.1 and v21.7.1:
node -e "fetch('https://www.airtable.com').then(res => console.log(res.status))"

will result in 200

Originally I was accessing Airtable API, but I was able to reproduce the error just on the homepage.

Logs & Screenshots

(main)$ node -e "fetch('https://airtable.com').then(res => console.log(res.status))"
node:internal/deps/undici/undici:12345
    Error.captureStackTrace(err, this);
          ^

TypeError: fetch failed
    at node:internal/deps/undici/undici:12345:11
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
  cause: AggregateError
      at internalConnectMultiple (node:net:1114:18)
      at internalConnectMultiple (node:net:1177:5)
      at Timeout.internalConnectMultipleTimeout (node:net:1687:3)
      at listOnTimeout (node:internal/timers:575:11)
      at process.processTimers (node:internal/timers:514:7) {
    code: 'ETIMEDOUT',
    [errors]: [
      Error: connect ETIMEDOUT 35.170.194.183:443
          at createConnectionError (node:net:1634:14)
          at Timeout.internalConnectMultipleTimeout (node:net:1685:38)
          at listOnTimeout (node:internal/timers:575:11)
          at process.processTimers (node:internal/timers:514:7) {
        errno: -110,
        code: 'ETIMEDOUT',
        syscall: 'connect',
        address: '35.170.194.183',
        port: 443
      },
      Error: connect ENETUNREACH 2600:1f18:7473:c20a:7850:a38:4412:3c8b:443 - Local (:::0)
          at internalConnectMultiple (node:net:1176:40)
          at Timeout.internalConnectMultipleTimeout (node:net:1687:3)
          at listOnTimeout (node:internal/timers:575:11)
          at process.processTimers (node:internal/timers:514:7) {
        errno: -101,
        code: 'ENETUNREACH',
        syscall: 'connect',
        address: '2600:1f18:7473:c20a:7850:a38:4412:3c8b',
        port: 443
      },
      Error: connect ETIMEDOUT 35.175.168.177:443
          at createConnectionError (node:net:1634:14)
          at Timeout.internalConnectMultipleTimeout (node:net:1685:38)
          at listOnTimeout (node:internal/timers:575:11)
          at process.processTimers (node:internal/timers:514:7) {
        errno: -110,
        code: 'ETIMEDOUT',
        syscall: 'connect',
        address: '35.175.168.177',
        port: 443
      },
      Error: connect ENETUNREACH 2600:1f18:7473:c20c:3e2d:d0be:734e:7edd:443 - Local (:::0)
          at internalConnectMultiple (node:net:1176:40)
          at Timeout.internalConnectMultipleTimeout (node:net:1687:3)
          at listOnTimeout (node:internal/timers:575:11)
          at process.processTimers (node:internal/timers:514:7) {
        errno: -101,
        code: 'ENETUNREACH',
        syscall: 'connect',
        address: '2600:1f18:7473:c20c:3e2d:d0be:734e:7edd',
        port: 443
      },
      Error: connect ETIMEDOUT 3.212.186.72:443
          at createConnectionError (node:net:1634:14)
          at Timeout.internalConnectMultipleTimeout (node:net:1685:38)
          at listOnTimeout (node:internal/timers:575:11)
          at process.processTimers (node:internal/timers:514:7) {
        errno: -110,
        code: 'ETIMEDOUT',
        syscall: 'connect',
        address: '3.212.186.72',
        port: 443
      },
      Error: connect ENETUNREACH 2600:1f18:7473:c20b:b899:9668:8cb8:8f26:443 - Local (:::0)
          at internalConnectMultiple (node:net:1176:40)
          at Timeout.internalConnectMultipleTimeout (node:net:1687:3)
          at listOnTimeout (node:internal/timers:575:11)
          at process.processTimers (node:internal/timers:514:7) {
        errno: -101,
        code: 'ENETUNREACH',
        syscall: 'connect',
        address: '2600:1f18:7473:c20b:b899:9668:8cb8:8f26',
        port: 443
      },
      Error: connect ETIMEDOUT 3.230.15.214:443
          at createConnectionError (node:net:1634:14)
          at Timeout.internalConnectMultipleTimeout (node:net:1685:38)
          at listOnTimeout (node:internal/timers:575:11)
          at process.processTimers (node:internal/timers:514:7) {
        errno: -110,
        code: 'ETIMEDOUT',
        syscall: 'connect',
        address: '3.230.15.214',
        port: 443
      },
      Error: connect ENETUNREACH 2600:1f18:7473:c20d:61ae:6cc5:2977:950d:443 - Local (:::0)
          at internalConnectMultiple (node:net:1176:40)
          at Timeout.internalConnectMultipleTimeout (node:net:1687:3)
          at listOnTimeout (node:internal/timers:575:11)
          at process.processTimers (node:internal/timers:514:7) {
        errno: -101,
        code: 'ENETUNREACH',
        syscall: 'connect',
        address: '2600:1f18:7473:c20d:61ae:6cc5:2977:950d',
        port: 443
      },
      Error: connect ETIMEDOUT 34.203.185.25:443
          at createConnectionError (node:net:1634:14)
          at Timeout.internalConnectMultipleTimeout (node:net:1685:38)
          at listOnTimeout (node:internal/timers:575:11)
          at process.processTimers (node:internal/timers:514:7) {
        errno: -110,
        code: 'ETIMEDOUT',
        syscall: 'connect',
        address: '34.203.185.25',
        port: 443
      },
      Error: connect ENETUNREACH 2600:1f18:7473:c20b:c68:6fb2:da10:d418:443 - Local (:::0)
          at internalConnectMultiple (node:net:1176:40)
          at Timeout.internalConnectMultipleTimeout (node:net:1687:3)
          at listOnTimeout (node:internal/timers:575:11)
          at process.processTimers (node:internal/timers:514:7) {
        errno: -101,
        code: 'ENETUNREACH',
        syscall: 'connect',
        address: '2600:1f18:7473:c20b:c68:6fb2:da10:d418',
        port: 443
      },
      Error: connect ETIMEDOUT 52.5.95.135:443
          at createConnectionError (node:net:1634:14)
          at Timeout.internalConnectMultipleTimeout (node:net:1685:38)
          at listOnTimeout (node:internal/timers:575:11)
          at process.processTimers (node:internal/timers:514:7) {
        errno: -110,
        code: 'ETIMEDOUT',
        syscall: 'connect',
        address: '52.5.95.135',
        port: 443
      },
      Error: connect ENETUNREACH 2600:1f18:7473:c20c:91a2:5f27:c209:f54:443 - Local (:::0)
          at internalConnectMultiple (node:net:1176:40)
          at Timeout.internalConnectMultipleTimeout (node:net:1687:3)
          at listOnTimeout (node:internal/timers:575:11)
          at process.processTimers (node:internal/timers:514:7) {
        errno: -101,
        code: 'ENETUNREACH',
        syscall: 'connect',
        address: '2600:1f18:7473:c20c:91a2:5f27:c209:f54',
        port: 443
      },
      Error: connect ETIMEDOUT 107.22.1.125:443
          at createConnectionError (node:net:1634:14)
          at Timeout.internalConnectMultipleTimeout (node:net:1685:38)
          at listOnTimeout (node:internal/timers:575:11)
          at process.processTimers (node:internal/timers:514:7) {
        errno: -110,
        code: 'ETIMEDOUT',
        syscall: 'connect',
        address: '107.22.1.125',
        port: 443
      },
      Error: connect ENETUNREACH 2600:1f18:7473:c20c:5ea9:a163:5f8:332a:443 - Local (:::0)
          at internalConnectMultiple (node:net:1176:40)
          at Timeout.internalConnectMultipleTimeout (node:net:1687:3)
          at listOnTimeout (node:internal/timers:575:11)
          at process.processTimers (node:internal/timers:514:7) {
        errno: -101,
        code: 'ENETUNREACH',
        syscall: 'connect',
        address: '2600:1f18:7473:c20c:5ea9:a163:5f8:332a',
        port: 443
      },
      Error: connect ETIMEDOUT 34.231.149.203:443
          at createConnectionError (node:net:1634:14)
          at Timeout.internalConnectMultipleTimeout (node:net:1685:38)
          at listOnTimeout (node:internal/timers:575:11)
          at process.processTimers (node:internal/timers:514:7) {
        errno: -110,
        code: 'ETIMEDOUT',
        syscall: 'connect',
        address: '34.231.149.203',
        port: 443
      },
      Error: connect ENETUNREACH 2600:1f18:7473:c20a:23bb:7de7:12a2:6bb8:443 - Local (:::0)
          at internalConnectMultiple (node:net:1176:40)
          at Timeout.internalConnectMultipleTimeout (node:net:1687:3)
          at listOnTimeout (node:internal/timers:575:11)
          at process.processTimers (node:internal/timers:514:7) {
        errno: -101,
        code: 'ENETUNREACH',
        syscall: 'connect',
        address: '2600:1f18:7473:c20a:23bb:7de7:12a2:6bb8',
        port: 443
      }
    ]
  }
}

Node.js v20.11.1

At the same time there is no issue in reaching that URL with cURL image

Environment

Additional context

Windows 10 running WSL 2 with Ubuntu 20.04.6 LTS

gregonarash avatar Mar 24 '24 15:03 gregonarash