 should have worked. It didn't — because localhost resolved to IPv6."
---

My backend listened on `127.0.0.1:1234`. My frontend called `localhost:1234`. No connection. No error in the server logs. Nothing.

I assumed `127.0.0.1` and `localhost` were the same thing. They're not.

---

## The bug

Node.js 17 changed how it resolves DNS. Before 17, `localhost` resolved to `127.0.0.1` (IPv4). After 17, it respects the system's `/etc/hosts` order. On macOS, `/etc/hosts` lists `::1 localhost` (IPv6) before `127.0.0.1 localhost` (IPv4).

```
# /etc/hosts
127.0.0.1    localhost
::1          localhost    ← Node.js 17 picks this one (first match in DNS order)
```

My backend bound to `127.0.0.1` — IPv4 only. My frontend resolved `localhost` to `::1` — IPv6. The connection attempt went to an address nobody was listening on. No error on the server side because the request never arrived.

```
Frontend: fetch("http://localhost:1234")
           → DNS resolves localhost to ::1
           → connects to [::1]:1234
           → nobody home → connection refused

Backend:  listening on 127.0.0.1:1234
           → never sees the request
           → no error logged
```

The fix: bind to `0.0.0.0` (all interfaces) or explicitly use `127.0.0.1` in the frontend URL instead of `localhost`.

---

## Three addresses, three meanings

These look interchangeable. They're fundamentally different.

| Address | What it means | IPv6 equivalent |
|---|---|---|
| `127.0.0.1` | Loopback — always points to this machine | `::1` |
| `localhost` | A hostname — resolved via DNS/hosts file | same, depends on resolution |
| `0.0.0.0` | Wildcard — "all interfaces" when listening; "no address" otherwise | `::` |

---

## 127.0.0.1: the loopback address

Loopback is a virtual network interface. No physical cable. No network card. Packets sent to `127.0.0.1` never leave the machine — the kernel routes them back to the same host.

IPv4 reserves the entire `127.0.0.0/8` range (127.0.0.0 to 127.255.255.255) for loopback. That's 16 million addresses, all pointing to the same machine. You can run Server A on `127.0.0.4` and Server B on `127.0.5.4` — both local, both loopback.

IPv6 has exactly one loopback address: `::1`. No range. The designers learned from IPv4's waste — 16 million loopback addresses was overkill.

---

## localhost: a hostname, not an address

`localhost` is just a name. The browser doesn't shortcut it to `127.0.0.1`. It goes through DNS resolution like any other hostname. First it checks `/etc/hosts`, then the system resolver.

```
# /etc/hosts
127.0.0.1    localhost
::1          localhost
```

This means `localhost` can resolve to either `127.0.0.1` or `::1` depending on the system, the resolver, and the application's preference for IPv4 vs IPv6. You can even override it:

```
# point localhost to a different loopback address
127.0.1.4    localhost
```

Now `localhost` goes to `127.0.1.4`. DNS resolution stays consistent — the system doesn't care that the name is "localhost."

Browsers treat `localhost` as a trusted origin. Firefox shows "not secure" for `http://0.0.0.0:3000` but not for `http://localhost:3000`, even though both are HTTP without TLS. `localhost` is on the browser's allow-list. IP addresses are not.

---

## 0.0.0.0: it depends on who's asking

`0.0.0.0` changes meaning based on context.

**As a listen address (server):** "Accept connections on every network interface." This includes loopback (`127.0.0.1`), your LAN IP (`192.168.1.x`), and any other interface. Most dev servers default to this.

**As a destination (client):** Invalid. You can't send packets to "everywhere." `ping 0.0.0.0` fails.

**In a browser:** Depends on the browser.

| Browser | `fetch("http://0.0.0.0:3000")` | Notes |
|---|---|---|
| Chrome | 200 OK | Silently treats it as loopback |
| Firefox | 200 OK | Shows "not secure" warning |
| Safari | Fails | Rejects the URL entirely |

The inconsistency is because `0.0.0.0` as a destination has no spec-defined behavior in browsers. Each vendor made their own call.

---

## The IPv4/IPv6 mismatch matrix

I tested every combination of backend listen address vs frontend connect address in Node.js 17:

**Node.js 17 frontend → normal backend:**

| Backend listens on | Frontend connects to | Result |
|---|---|---|
| `localhost` | `127.0.0.1` | OK |
| `localhost` | `localhost` | OK |
| `0.0.0.0` | `127.0.0.1` | OK |
| `0.0.0.0` | `localhost` | OK |
| `0.0.0.0` | `0.0.0.0` | OK |
| `127.0.0.1` | `127.0.0.1` | OK |
| **`127.0.0.1`** | **`localhost`** | **Fails** |
| `127.0.0.1` | `0.0.0.0` | OK |

**Node.js 17 backend → normal frontend (Firefox):**

| Backend listens on | Frontend connects to | Result |
|---|---|---|
| `localhost` | `127.0.0.1` | **Fails** |
| `localhost` | `localhost` | OK |
| `localhost` | `0.0.0.0` | **Fails** |
| `0.0.0.0` | anything | OK |
| `127.0.0.1` | `127.0.0.1` | OK |
| `127.0.0.1` | `localhost` | OK |

Pattern: anything involving Node.js 17 resolving `localhost` to `::1` while the other side is IPv4-only breaks silently.

The safest combination: backend listens on `0.0.0.0`, frontend connects to `127.0.0.1`. No DNS resolution ambiguity. No IPv4/IPv6 mismatch.

---

## IPv6 link-local: fe80 and why it exists

IPv6 introduced link-local addresses (`fe80::/10`) — addresses that work on a single network link without any router or DHCP.

When a device joins a network, it assigns itself a `fe80::` address automatically (SLAAC). It uses this address to discover the router via NDP (Neighbor Discovery Protocol, IPv6's replacement for ARP). The router then provides a global IPv6 address.

Think of `fe80::` as a temporary name tag. The device says "I'm `fe80::xxxx`" to introduce itself on the local link, then gets a real address from the router.

Three rules for `fe80` communication:

1. Same physical link (same Wi-Fi access point, same switch)
2. Same subnet
3. Same protocol (Wi-Fi and Ethernet can't cross-talk via `fe80`)

This means two interfaces on the same machine — say `en0` (Wi-Fi) and `utun0` (VPN) — can't talk via `fe80` even though both have `fe80::` addresses. Different links.

### fe80 vs 192.168.x.x

Both are "local" addresses. The difference: `192.168.x.x` is routed — packets go through the router. `fe80::` is link-local — packets travel directly between devices on the same link, no router involved.

```bash
# Access a server on the same Wi-Fi via link-local (no router)
curl http://[fe80::xxxx:xxxx:xxxx:4c27%en0]:3000

# Access the same server via private IPv4 (through router)
curl http://192.168.1.42:3000
```

Same destination, different path. The `fe80` route is direct.

---

## What I'd tell someone starting a local dev server

1. **Listen on `0.0.0.0`** unless you have a reason not to. It accepts IPv4 and IPv6 connections on all interfaces.
2. **Connect to `127.0.0.1`**, not `localhost`. Avoids DNS resolution surprises across Node versions and OS configurations.
3. **If something silently fails** — no error, no log, nothing — check if one side is IPv4 and the other is IPv6. The request might be going to an address nobody is listening on.

---

## References

- [Node.js DNS resolution change (issue #40537)](https://github.com/nodejs/node/issues/40537)
- [http-proxy-middleware localhost resolution issue (#705)](https://github.com/chimurai/http-proxy-middleware/issues/705)
- [Accessing IPv6 link-local from browser (StackOverflow)](https://stackoverflow.com/questions/45299648/how-to-access-devices-with-ipv6-link-local-address-from-browserlike-ie-firefox)
- [Linux virtual network interfaces (thiscute.world)](https://thiscute.world/posts/linux-virtual-network-interfaces/)
