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 ↗