hints / network

Save-Data

Save-Data: on signals the user has explicitly asked for reduced data usage. It is the only hint sent without any opt-in, so treat it as a direct user request.

sent by default Network
Example
Save-Data: on
JavaScript
navigator.connection.saveData
Available since
Chrome 49 (2016)
Engines
Chrome Edge Opera Firefox Safari
References
MDN · Specification

Save-Data is unlike everything else in this registry: it is not a measurement, it is a request from a human. When someone enables Data Saver / Lite mode in their browser or OS, every request starts carrying:

Save-Data: on

No Accept-CH is needed; the user’s explicit choice overrides the opt-in dance. When data saver is off, the header is simply absent (you will never see Save-Data: off).

Honoring it

This one comes with a mild ethical obligation: the user directly asked. The standard playbook:

  • Serve compressed, lower-resolution images; skip 2x renditions even on retina screens.
  • Drop autoplaying video, replace with poster + tap-to-play.
  • Skip web fonts (font-display: optional, or system stack).
  • Defer non-critical third-party embeds entirely.
  • If you have a “lite” page variant, this header is its trigger. Add Vary: Save-Data so caches keep variants apart.
HTTP/1.1 200 OK
Vary: Save-Data

Where it comes from

Chromium browsers on Android expose the toggle most prominently; desktop Chrome removed the old Data Saver extension but the signal remains available to the platform. Some proxies and carrier “lite modes” also inject it. Firefox and Safari never send it. Coverage is heavily skewed toward exactly the audience it describes: prepaid mobile users on metered connections. That skew makes it far more decision-worthy than its raw global percentage suggests.

In JavaScript

navigator.connection?.saveData  // true | false

Same Chromium-only caveat as the header. If you check one network signal, check this one: unlike RTT or Downlink, it never fluctuates, never mismeasures, and encodes intent rather than inference.