web-dev-qa-db-ja.com

HTTPリクエストヘッダー:UserAgent変数

HTTPリクエストを送信するとき、IEはUser-Agent変数をサーバーに送信します。可能な値(ネットワークデバッガーから見た場合):

ユーザーエージェント:Mozilla /5.0(互換MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)

私の質問:IE(または他のブラウザ)はこの変数をどのように見つけますか?いくつかのウェブサイトにアクセスするとき、この変数は他のものとは異なります。 「互換性設定」は1つのオプションですが、それ以上のことがあると思います。

誰でもこの変数のプロセスを説明できますか?

23
PoeHaH

User-Agentは、HTTP応答ヘッダーではなく、HTTP要求ヘッダーに表示されます。一般に、リクエストはブラウザからWebアプリケーションに送信されます。そのため、ユーザーエージェント変数はブラウザによって入力されます。異なるブラウザは、このフィールドを異なる値で埋めます。

IEこれらの変数を見つける方法については、 ser-Agent Registry Keys について質問していると思います。

次のレジストリキーに値を追加して、ユーザーエージェント文字列の特定のトークンを上書きすることもできます。

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
   SOFTWARE
      Microsoft
         Windows
            CurrentVersion
               Internet Settings
                  5.0
                     User Agent
                        (default) = "Mozilla/4.0"
                        Compatible = "compatible"
                        Platform = "Windows NT 5.1"
                        Version = "MSIE 6.0"
                        Pre Platform
                           Token = Value
                        Post Platform
                           Token = Value

ユーザーエージェントキーのデフォルト値は、ユーザーエージェント文字列で報告されるアプリケーション名とアプリケーションバージョントークンを置き換えます。最初の7文字はアプリケーション名に使用され、残りの文字はアプリケーションバージョントークンを指定することに注意してください。

Compatible、Platform、およびVersionの値は、ユーザーエージェント文字列内の対応するトークンを置き換えます。

レジストリエディターを使用してPre-PlatformキーまたはPost-Platformキーの下に新しい文字列値を作成することにより、ユーザーエージェント文字列に追加のトークンを追加できます。値の名前は完全なトークンである必要があります。値のデータは無視されます。 Pre-Platformキーに追加されたトークンは、最終的なユーザーエージェント文字列のプラットフォームトークンの前に表示されます。 Post-Platformキーに追加されたトークンは、最終的なユーザーエージェント文字列のプラットフォームトークンの後に表示されます。 Pre-PlatformキーまたはPost-Platformキーの複数のトークンは、予測不能な順序で表示されます。

28
StarPinkER

ユーザーエージェントの Wikipediaの記事 は次のように述べています:

現在、User-Agent文字列形式はRFC 2616(HTTP/1.1)のセクション14.43で指定されています。HTTPのUser-Agent文字列の形式は、オプションのコメント付きの製品トークン(キーワード)のリストです。

ですから、 RFC 2616セクション について読むことをお勧めします:

14.43ユーザーエージェント

User-Agent request-headerフィールドには、リクエストを発信したユーザーエージェントに関する情報が含まれています。これは、統計目的、プロトコル違反のトレース、および特定のユーザーを回避するための応答を調整するためのユーザーエージェントの自動認識のためです。
エージェントの制限。ユーザーエージェントは、このフィールドを
リクエスト。このフィールドには、複数の製品トークン(セクション3.8)と、エージェントと、
ユーザーエージェントの重要な部分。慣例により、製品トークンは、識別のための重要性の順にリストされています。
応用。

   User-Agent     = "User-Agent" ":" 1*( product | comment )

例:

   User-Agent: CERN-LineMode/2.15 libwww/2.17b3

製品トークンに関するセクション4.8には、次のように記載されています。

3.8製品トークン

製品トークンは、アプリケーションとの通信を可能にするために使用されます
ソフトウェア名とバージョンで自身を識別します。使用するほとんどのフィールド
製品トークンは、重要な部分を形成するサブ製品も許可します
リストされるアプリケーションの、空白で区切られたもの。によって
慣習、製品は重要度順にリストされています
アプリケーションを識別するため。

   product         = token ["/" product-version]
   product-version = token

例:

   User-Agent: CERN-LineMode/2.15 libwww/2.17b3
   Server: Apache/0.8.4

製品トークンは短く、要点を示す必要があります。してはいけません
広告またはその他の重要でない情報に使用されます。トークン文字は製品バージョンに表示される場合がありますが、このトークンは
バージョン識別子(つまり、
同じ製品は、製品値の製品バージョン部分のみが異なるべきです(SHOULD)。

したがって、RFC 2616によると、ユーザーエージェントの内容はブラウザー次第です。たとえば、Mozilla Firefoxがユーザーエージェントを構築する方法は次のとおりです。 https://developer.mozilla.org/en-US/docs/Gecko_user_agent_string_reference

6
Bgi