## TL;DR

Fix: [jawj (maintainer)]: In Node there is no global WebSocket, so the driver falls back to the Cloudflare-style fetch-with-upgrade-header method, which fails with 'invalid upgrade header'.

## The error

```text
Is the connection string the right URL? `invalid upgrade header` sounds like a websocket error, so I'm wondering if I was supposed to use the connection string or maybe a URL for the proxy.
```

## Fix

1. [jawj (maintainer)]: In Node there is no global WebSocket, so the driver falls back to the Cloudflare-style fetch-with-upgrade-header method, which fails with 'invalid upgrade header'.

Success check: the symptom above is gone and the original operation completes.

## When to use

- You hit this exact symptom in serverless.
- You want the verified fix without digging through the thread.

## When not to use

- A different error in serverless, even a similar-looking one.
- General serverless setup or credential questions.

## Compatibility

- Serverless (neondatabase/serverless)

## Variant phrasings

- How to fix "invalidArgumentError: invalid upgrade header" in serverless
- serverless: invalidArgumentError: invalid upgrade header

## Source

- https://github.com/neondatabase/serverless/issues/7