v147 · Security · LNA Context
LNA Context
Local Network Access restrictions across all the APIs Chrome has protected — fetch, WebSocket, WebTransport, and service worker WindowClient.navigate() — and the consistent opt-in mechanism.
Local Network Access (LNA) is Chrome's implementation of the Private Network Access specification. It prevents public websites from making unsolicited requests to private IP addresses and localhost. The protection has been rolled out API by API across Chrome versions.
API boundary classifier
Pick an API and target URL to see whether Chrome 147 allows it, requires an LNA opt-in, or blocks it with no server opt-in path.
LNA coverage by Chrome version
| API | Chrome version | Status | Opt-in mechanism |
|---|---|---|---|
| fetch() / XMLHttpRequest | Chrome 104 | Shipped | Access-Control-Allow-Private-Network: true in preflight response |
| WebSocket connections | Chrome 147 | Shipped | HTTP GET preflight before upgrade; Access-Control-Allow-Private-Network: true |
| WebTransport connections | Chrome 147 | Shipped | Access-Control-Allow-Private-Network: true in HTTP/3 response |
| WindowClient.navigate() | Chrome 147 | Shipped | Blocked; no opt-in path — navigate() to private addresses disallowed from public SW |
| Local network split permissions | Chrome 145+ | Shipped | Permission prompt for private network access |
address classification
// Private network addresses (LNA restricted)
192.168.0.0/16 // RFC 1918 class C
10.0.0.0/8 // RFC 1918 class A
172.16.0.0/12 // RFC 1918 class B
127.0.0.1 // IPv4 loopback
::1 // IPv6 loopback
localhost // resolves to loopback
*.local // mDNS / Bonjour
// Public addresses (unrestricted)
// Any address not in the above ranges
// Same origin (always allowed)
// Requests from private to private are unrestricted
// Requests from localhost to localhost are unrestricted
shared opt-in header
All LNA-restricted APIs (fetch, WebSocket, WebTransport) use the same response header to grant access. Only WindowClient.navigate() has no opt-in path — it is unconditionally blocked when the source is public and the target is private.
// Server response that grants LNA access (fetch, WS, WebTransport)
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://public.example.com
Access-Control-Allow-Private-Network: true
// WindowClient.navigate() — no opt-in mechanism
// Blocked regardless of server response headers
see also
implementation reference
Need the exact API surface, compatibility boundaries, errors, lifecycle, and source links? Read the matching gendn reference ↗