Thing is, while it wasn’t called “browser fingerprinting” immediately, it basically started as soon as JS was around. And feature-detection / media-queries actually make for better compatibility than just User-Agent strings (and other headers).
Content negotiation never really caught on, as best as I can tell. There’s a number of headers that the client can send so that the server can select a version by language, content-type, and a few other things, but in all the web deployments I’ve ever done content-negotiation was never a consideration.
Thing is, while it wasn’t called “browser fingerprinting” immediately, it basically started as soon as JS was around. And feature-detection / media-queries actually make for better compatibility than just User-Agent strings (and other headers).
Content negotiation never really caught on, as best as I can tell. There’s a number of headers that the client can send so that the server can select a version by language, content-type, and a few other things, but in all the web deployments I’ve ever done content-negotiation was never a consideration.
Almost any information can be abused.