Skip to content

Define "brand" and "full version" for CH-UA #124

@romainmenke

Description

@romainmenke

see : https://datatracker.ietf.org/doc/html/draft-west-ua-client-hints-00#section-2

Examples :

In polyfill.io the User Agent string is used to determine the required polyfills to make a website work in specific browsers. (https://polyfill.io/v3/polyfill.js?features=fetch)

At Mr. Henry we use the User Agent string to determine which Javascript and CSS bundles will work correctly. We also split error reporting so that errors from old or obscure browsers do not cause signal overload for product teams. (change your UA to something older like IE 11 : https://www.mrhenry.be/supportdetails/)

The shared principle is that the underlying engine capabilities are important.
We do not care about the device, browser brand,...

Getting this right means that we can support more users while also saving bandwidth, cpu cycles, ...

One major challenge here are the non Safari browsers and webviews on iOS and Chromium based browsers like Edge, Samsung Internet, Opera, ...

A CriOS UA string (Chrome on iOS) does not contain this information today :

Mozilla/5.0 (iPhone; CPU iPhone OS 14_8 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/92.0.4515.90 Mobile/15E148 Safari/604.1

  • CriOS/92.0.4515.90 is meaningless for this use case as it has no correlation to the underlying WebKit version that is actually used.
  • Safari/604.1 has been frozen since Safari 11.

CriOS/92.0.4515.90 would fit the current definition of brand + full version but it wouldn't be useful (or at least not for me :) )

We could infer it from other parts and/or keep track of CriOS versions in a table. But this process is error prone and doesn't scale well because there are a lot of WebViews embedded in Apps.


My concern is that brand and full version are too vague in the current specification.

Maybe these values are not fit for my purpose?
But should it then be clarified that these values do not need to have any correlation with the browser engine?
Is there another header more appropriate for reliable engine capability detection?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions