DX・デジタルトランスフォーメーション

AppStoreにて無料公開中! ”システム手帳”で検索! - AppStoreへ iPad版 - iPhone版

ブロックチェーン・暗号技術 | android | iOS | Web | アプリの著作権 | 日本のなりたち | 禅・大乗仏教 | 新しい社会

Sec-CH-UAクライアント・ヒント・ヘッダーによるUA判定をクラウド側で行う方法

クライアント・ヒントによるUA判定をクラウドで行うには、クラウドから利用者ブラウザに対し、Accept-CH httpヘッダーを送信し、CH(Client Hints)を要求する必要がある。

CHは実験段階のため、対応していないブラウザがあるし、対応しているブラウザであってもクラウドサイドで取得しようとしても取得できない場合がある。(20211116現在)

クライアントサイドで行う方が簡単だし、確実に取得できる。

そのため、jsでCH情報を取得し、rest apiでクラウドに通知することを薦める。

この場合は、httpヘッダーでAccept-CH要求をする必要はない。

js
if(navigator.userAgentData === undefined) {
  //Safari
} else {
  //Edge  Chrome
  navigator.userAgentData.getHighEntropyValues(["architecture", "model", "platform", "platformVersion","uaFullVersion"])
  .then(ua => {
    var osName = ua["platform"];
    var osVersion = ua["platformVersion"];  //"13.0.0"以上ならWindows11
    var browserFullVersion = ua["uaFullVersion"];					
  });
}

クラウドサイドで取得するには、CH情報ヘッダーをhttpリクエストに含めてもらう必要があるので、Accept-CH httpヘッダーをブラウザに送信する。

(jsでCHを取得する場合には必要ない。)

html
<meta http-equiv="Accept-CH" content="Sec-CH-UA, Sec-CH-UA-Arch, Sec-CH-UA-Bitness, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List">

.htaccess
# http headerによりCH(クライアント・ヒント)をブラウザに要求
Header set Accept-CH "Sec-CH-UA, Sec-CH-UA-Arch, Sec-CH-UA-Bitness, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List"

php
// http headerによりCH(クライアント・ヒント)をブラウザに要求
header("Accept-CH: Sec-CH-UA, Sec-CH-UA-Arch, Sec-CH-UA-Bitness, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List");

<注意点>

*http1.1に対応のクラウド(http2に未対応クラウド)では、セッションごとに毎回Accept-CH要求する必要があるため、クライアント・ヒントを取得するためには、1回のセッションで、2ファイル以上をやり取りする必要がある。(a.html, b.pngなど)

*http2対応のクラウドとブラウザ(現在の全ての主要ブラウザ)間では、タブを起動してから終了するまでが一つのセッションである。

(過去のhttp1.1対応ブラウザでは、1つのhtmlファイルにembededしているファイル群をまとめて1つのHTTPセッションとしていた。)

*ここで言うセッションとは、httpプロトコルにおいてTCPコネクションの確立からクローズまでの期間のこと。

*Accept-CH要求をしないと、オペレーティングシステムバージョンとブラウザーバージョンはダミー値が返される。(User-Agentヘッダー値)

Windows/Chrome
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.0 (KHTML, like Gecko) Chrome/95.0.0 Safari/537.00

*ダミー値の濃淡は、2023年まで2年かけて少しずつダミー値に置き換わる予定だ。

*Chrome、EdgeはCH(Client Hints)に対応しているが、Safari(iOSを含む)はSec-CH-UA-Platformヘッダー、Sec-CH-UA-Platform-Versionヘッダーを含むSec-CH-UAに未対応のため、従来のUser-Agentヘッダーを取得する。(20211116現在)

オペレーティングシステム名を求める

php
//http header: Sec-CH-UA-Platform
//'Windows'
$osName = $_SERVER['HTTP_SEC_CH_UA_PLATFORM'];

オペレーティングシステム・バージョンを求める

php
//http header: Sec-CH-UA-Platform-Version
//"13.0.0"以上ならWindows11
$osVersion = $_SERVER['HTTP_SEC_CH_UA_PLATFORM_VERSION'];

既存の旧OS判定プログラムがある場合には、前述の旧UA文字列の該当箇所をCH値から求めた値に置き換えるのが有効な対応方法と考えられる。

2022年4月
     12
3456789
10111213141516
17181920212223
24252627282930
android
iOS
web
アプリの著作権
ブロックチェーン/暗号技術
新しい社会
禅・大乗仏教
日本のなりたち

AppStoreにて無料公開中! ”システム手帳”で検索! - AppStoreへ iPad版 - iPhone版
デジタルトランスフォーメーションで新しい生活を提案!