Sec-CH-UA-Platformと従来のUser Agent String、徹底比較!

2024-06-21

HTTPヘッダーにおけるSec-CH-UA-Platform:詳細解説

Sec-CH-UA-Platformヘッダーの値は、以下の2つの部分で構成されます。

  • プラットフォーム名: Windows、macOS、Linuxなどの主要なOSを識別します。
  • バージョン: プラットフォームのバージョンを識別します。

具体的な形式は以下の通りです。

Sec-CH-UA-Platform: <platform>; v=<version>

  • Windows 10の場合:
Sec-CH-UA-Platform: Windows; v="10"
  • macOS 12の場合:
Sec-CH-UA-Platform: macOS; v="12"
  • Linux Mint 20の場合:
Sec-CH-UA-Platform: Linux; v="20"

Sec-CH-UA-Platformを使用する利点は以下の通りです。

  • ユーザーにとって最適なコンテンツや機能の提供: Webサーバーは、ユーザーのOSに基づいて、最適化されたコンテンツや機能を提供することができます。例えば、古いバージョンのOSを使用しているユーザーには、古いバージョンのブラウザでも動作する古いバージョンのコンテンツを提供することができます。
  • パフォーマンスの向上: Webサーバーは、ユーザーのOSに関する情報を事前に知ることで、より効率的なコンテンツ配信が可能になります。
  • セキュリティの向上: Webサーバーは、ユーザーのOSに関する情報を基に、より適切なセキュリティ対策を講じることができます。
  • すべてのブラウザでサポートされているわけではない: Sec-CH-UA-Platformは比較的新しく導入されたヘッダーであり、すべてのブラウザでサポートされているわけではありません。現時点では、主要なブラウザの大部分がサポートしていますが、一部の古いブラウザではサポートされていない可能性があります。
  • 偽装の可能性: ユーザーエージェントは、Sec-CH-UA-Platformヘッダーの値を偽装することが可能です。そのため、このヘッダーの情報だけでユーザーのOSを判断することはできません。

Sec-CH-UA-Platformヘッダーをクライアント側で設定するには、以下の方法があります。

  • ブラウザの設定: 一部のブラウザでは、Sec-CH-UA-Platformヘッダーを常に送信するように設定することができます。
  • JavaScript: JavaScriptを使用して、Sec-CH-UA-Platformヘッダーの値を動的に生成することができます。

Webサーバー側でSec-CH-UA-Platformヘッダーの値を取得するには、以下の方法があります。

  • サーバー側言語: サーバー側言語を使用して、HTTPリクエストヘッダーからSec-CH-UA-Platformヘッダーの値を取得することができます。

Sec-CH-UA-Platformの例

以下の例は、JavaScriptを使用してSec-CH-UA-Platformヘッダーの値を動的に生成し、それをHTTPリクエストに設定する方法を示しています。

const navigator = window.navigator;
const platform = navigator.platform;
const platformVersion = navigator.platformVersion;

const secCHUAPlatformHeader = `Sec-CH-UA-Platform: ${platform}; v=${platformVersion}`;

const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://example.com/');
xhr.setRequestHeader('Sec-CH-UA-Platform', secCHUAPlatformHeader);
xhr.send();

この例では、navigator.platformプロパティを使用してプラットフォーム名を取得し、navigator.platformVersionプロパティを使用してプラットフォームバージョンを取得しています。その後、これらの値を使用してSec-CH-UA-Platformヘッダーの値を生成し、それをHTTPリクエストに設定しています。

Sec-CH-UA-Platformは、Webサーバーに対してユーザーエージェントが動作しているプラットフォームに関する情報を提供するHTTPヘッダーです。このヘッダーを使用することで、Webサーバーはユーザーにとって最適なコンテンツや機能を提供することができます。



JavaScript で Sec-CH-UA-Platform ヘッダーを生成する

この例では、JavaScript を使用して navigator.platformnavigator.platformVersion プロパティからプラットフォーム情報とバージョンを取得し、Sec-CH-UA-Platform ヘッダー値を生成します。そして、生成したヘッダー値を fetch API を使用して送信されるリクエストに設定します。

async function fetchWithCHUAPlatform() {
  const platform = navigator.platform;
  const platformVersion = navigator.platformVersion;

  const headers = new Headers();
  headers.append('Sec-CH-UA-Platform', `${platform}; v=${platformVersion}`);

  const response = await fetch('https://example.org', { headers });
  // レスポンスを処理
}

fetchWithCHUAPlatform();

サーバー側で Sec-CH-UA-Platform ヘッダーを取得する

この例では、Go言語で Express フレームワークを使用して、リクエストヘッダーから Sec-CH-UA-Platform ヘッダー値を取得する方法を示します。

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        platform := r.Header.Get("Sec-CH-UA-Platform")
        if platform != "" {
            fmt.Fprintf(w, "Sec-CH-UA-Platform: %s\n", platform)
        }
    })

    http.ListenAndServe(":8080", nil)
}

このコードは、/ エンドポイントへのリクエストに対して、Sec-CH-UA-Platform ヘッダー値をコンソールに出力します。

一部のブラウザでは、開発者ツールを使用して、Sec-CH-UA-Platform ヘッダーを常に送信するように設定することができます。

Firefox の場合

  1. Firefox を開き、about:config ページにアクセスします。
  2. フィルターボックスに network.http.client.headers.Sec-CH-UA-Platform と入力します。
  3. 検索結果にある network.http.client.headers.Sec-CH-UA-Platform 設定をダブルクリックします。
  4. 値を true に設定します。
  5. Firefox を再起動します。

Chrome の場合

  1. Chrome を開き、chrome://flags ページにアクセスします。
  2. 検索ボックスに Sec-CH-UA-Platform と入力します。
  3. #flag_sec-ch-ua-platform フラグを見つけ、ドロップダウンメニューから Enabled を選択します。
  4. Chrome を再起動します。

注意事項

  • 上記のコードはあくまで例であり、状況に合わせて変更する必要があります。
  • Sec-CH-UA-Platform ヘッダーは比較的新しく導入されたヘッダーであり、すべてのブラウザでサポートされているわけではありません。
  • ユーザーエージェントは Sec-CH-UA-Platform ヘッダー値を偽装することができるため、このヘッダーの情報だけでユーザーの OS を判断することはできません。


Sec-CH-UA-Platform の代替方法

代替手段として考えられるもの

  1. User-Agent Client Hints (UA-CH):

    • ブラウザの種類、バージョン、レンダリングエンジンなどの情報を提供します。
    • Sec-CH-UA-Platform よりも詳細な情報を提供できますが、すべてのブラウザでサポートされているわけではありません。
    • 取得には JavaScript が必要です。
  2. User Agent String:

    • ブラウザ、OS、デバイスに関する情報を提供します。
    • 最も古くから使用されている方法ですが、情報が古かったり不正確だったりすることがあり、プライバシー上の問題も懸念されています。
  3. Feature Detection:

    • ブラウザが特定の機能をサポートしているかどうかを判断します。
    • 個々の機能ごとに判定が必要になるため、煩雑になる可能性があります。

各代替手段の比較

代替手段利点欠点
User-Agent Client Hints詳細な情報提供サポート状況が限定、JavaScript required
User Agent String広いサポート範囲情報の古さ、不正確さ、プライバシー問題
Feature Detection個別の機能判定が可能判定の煩雑さ

Sec-CH-UA-Platform からの移行は、段階的に進める必要があります。

  1. 現状の把握: 現在の Web サイトが Sec-CH-UA-Platform をどのように使用しているかを把握します。
  2. 代替手段の評価: 上記の代替手段を評価し、Web サイトに最適なものを選択します。
  3. 段階的な移行: 新しいヘッダーへの移行を段階的に行い、古いヘッダーとの互換性を維持します。
  4. テストと監視: 移行後も、Web サイトが正しく動作していることをテストし、監視します。