1. はじめに
開発者は以下の用途でデバイスクラスのシグナルを必要とします:-
低スペックデバイス向けにサイトやコンポーネントの軽量版を提供する。例:
-
Googleの「search lite」サービス(EMで使われる10KBの検索結果ページ)を提供する
-
Facebookで動画プレイヤーの軽量版を提供する
-
Google Mapsで軽量タイル画像を提供する
-
-
メトリクスの正規化:分析では、メトリクスをデバイスクラス基準で正規化する必要がある。 例えば、ハイエンドデバイスで100ミリ秒のタスクが発生した場合、ローエンドデバイスと比べてより重大な問題となる。
デバイスメモリは「デバイスクラス」を判断するのに非常に有用なシグナルです。512MB未満、512MB~1GBの低メモリデバイスは新興市場で広く使われています。
1.1. 利用例
サーバーはSec- CH- Device- Memory HTTP
クライアントヒントをAccept- CHヘッダーフィールドやhttp-equiv属性付きHTML
meta要素で受信するよう通知できます:
Accept-CH: Sec-CH-Device-Memory
サーバーから上記プリファレンスを受け取ると、対応したユーザーエージェントはSecリクエストヘッダーフィールドを使って
デバイスのメモリ能力を通知します:
GET /example HTTP / 1.1 Sec-CH-Device-Memory : 0.5 ...
2.
Sec- CH- Device- Memory(クライアントヒント)ヘッダーフィールド
SecヘッダーフィールドはHTTPクライアントヒントヘッダーです。
これは構造化ヘッダー値であり、値はitem型で、
decimal値を持ちます。この値はクライアントのデバイスメモリ(おおよそのRAM量、GiB単位)を示します。
SecヘッダーフィールドのABNF(Augmented
Backus-Naur Form)構文は以下の通りです:
Sec-CH-Device-Memory = sf-decimal
2.1. デバイスメモリ値の算出
この値は実デバイスメモリ(MiB単位)を使い、最上位ビットだけが立って他はゼロになる値(2のべき乗)に丸めてから 1024.0で割り、GiB値を算出します。値のリストには上限値と下限値を設定すべきです。
NOTE: 実装ごとに異なる値を選択しても良いですが、推奨上限は8GiB、推奨下限は0.25GiB(256MiB)です。
Secヘッダーフィールドがメッセージに複数回出現した場合、
最後の値がそれ以前のすべてに優先されます。
2.2. 例
512 MiBは次のように報告されます:
Sec-CH-Device-Memory: 0.5
1000 MiBは次のように報告されます:
Sec-CH-Device-Memory: 1
取りうる値の一覧は、0.25, 0.5, 1, 2, 4, 8となります。
3. デバイスメモリJS API
[
SecureContext ,
Exposed =(Window ,Worker )
] interface mixin NavigatorDeviceMemory {
readonly attribute double deviceMemory ;
};
Navigator includes NavigatorDeviceMemory ;
WorkerNavigator includes NavigatorDeviceMemory ;
NOTE: self は、 §2.1
デバイスメモリ値の算出で説明されるRAM量(GiB)を返します。
4. セキュリティの考慮事項
SecクライアントヒントヘッダーとJS APIは、
HTTPSセキュアコンテキストでのみ利用可能です。
(たとえばデバイスの種類やクラス)ユーザーエージェントやクライアントの他特徴にもとづくデバイス識別・分類は、最適化されたコンテンツ選択や提供に広く使われています。 このような解決策は商用デバイスデータベースに依存しがちですが、導入・統合・管理が困難です。 本仕様は技術的課題を解決しうるデバイスメモリ能力取得機構を定義しています。
フィンガープリンティングリスク低減のため、返す値は最上位ビットで丸め(厳密値ではない)、さらに上下限も設けています。
5. IANAの考慮事項
本仕様はHTTPリクエストヘッダーSecフィールドを定義し、
パーマネントメッセージヘッダーフィールド登録簿([RFC3864])へ登録します。
5.1. Sec-CH-Device-Memoryヘッダーフィールド
- ヘッダーフィールド名
-
Sec-CH-Device-Memory
- 適用プロトコル
-
http
- ステータス
-
standard
- 著者/管理者
-
IETF
- 仕様文書
6. 謝辞
技術的な助言・提案により本仕様の改良につながったすべての貢献者に感謝します。