X-User-Agent:

User-Agent: ヘッダー (HTTP、電子メール)

[59] HTTP電子メールネットニュースRTSPSIP その他のプロトコルで使われている User-Agent:は、 使用されている利用者エージェントを表します。

[61] 誘導: 利用者エージェント一般については 利用者エージェントおよび User Agent をご覧下さい。 CGI での利用に関しては HTTP_USER_AGENT の項をご覧下さい。 HTTP その他に関してはここをご覧下さい。 その他関連プロトコル要素に関しては >>62 をご覧下さい。

仕様書

意味

[84] User-Agent: は、要求を元々作成した利用者エージェントについての情報を含めるものです。 これはしばしば相互運用性の問題を究明する補助となったり、 特定の利用者エージェントの制限を回避したり、 利用されているブラウザーOSの分析に使ったりするものです。 >>83

構文

[86] 1つ以上の product または comment を、 RWS 区切りで並べたものとされています。ただし、最初の1つは product でなければなりません。 >>83

  1. product
  2. *
    1. RWS
    2. |
      1. product
      2. comment

[88] ここで product は、利用者エージェントのソフトウェアと主要な部分製品を識別上の重要なものから順番に並べたもの >>83 とされています。

[87] 現実にはこの構文は、ヒント程度にしか尊重されていません。 HTTP 仕様上の字句では認められていない文字列が使われることもありますし、 product に複数 / が含まれることもあります。 順序も必ずしも重要な順ではありません。実際のソフトウェアの識別に関与しない歴史的な値を設定することも多々あります。

[89] 送信者は、生成する値を製品の識別に必要な程度に制限するべきです広告その他製品の識別に必要無い情報を生成してはなりません。 第三者による部分製品からの追加も制限するべきです>>83

[90] 版番号の部分に版情報でないものを含めるべきではありません (つまり、同じ製品の後の版は版番号部分だけが違うべきです)。 >>83

[92] 他の実装との互換性を示すためにその製品名を含めることは推奨 (encourage) しません >>83

[33] SSDP >>32UPnP >>37 における HTTP ではより細かく構文が決められています。

ローカルルール

[68] Discord Developer Portal — Documentation — Reference, , https://discord.com/developers/docs/reference#user-agent

User-Agent: DiscordBot ($url, $versionNumber)

Clients may append more information and metadata to the end of this string as they wish.

文脈

[85] 利用者エージェントは、特に設定がない限り、各要求User-Agent: を含めるべきです >>83

[103] サーバーによっては、 User-Agent: がなかったり、 空だったりすると要求を拒絶することがあるようです。 Web互換性のためには User-Agent: ヘッダーを要求に含める必要があります。

処理

[19] 利用者エージェントの識別を参照。

セキュリティー

[20] 利用者エージェントの識別を参照。

プライバシー

[91] User-Agent: の値は fingerprinting に使われることがあり >>83、注意が必要です。

[21] 利用者エージェントの識別を参照。

歴史

[82] RFC 1945 (HTTP/1.0) 10.15; RFC 2068 (HTTP/1.1) 14.42; RFC 2616 (HTTP/1.1) 14.43 User-Agent

The User-Agent request-header field contains information about the user agent originating the request. This is for statistical purposes, the tracing of protocol violations, and automated recognition of user agents for the sake of tailoring responses to avoid particular user agent limitations. Although it is not required, user agents should User agents SHOULD include this field with requests. The field can contain multiple product tokens (Section 3.7 3.8) and comments identifying the agent and any subproducts which form a significant part of the user agent. By convention, the product tokens are listed in order of their significance for identifying the application.

User-Agent 要求頭欄は、要求を作成した利用者エージェントについての情報を含みます。 これは、統計目的、プロトコル違反の追跡、および特定利用者エージェントの制限を避けるために応答を手直しするための利用者エージェントの自動認識のためのものです。 利用者エージェントは、この欄を要求に含めるべきです。 この欄は、複数の product 字句ならびに利用者エージェントおよび利用者エージェントの重要な部分を形成する部分製品を識別する注釈を含めることができます。 慣習的に、 product 字句は、その応用を識別するのに有意な順に列挙します。

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

Example:

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

Note: Some current proxy applications append their product information to the list in the User-Agent field. This is not recommended, since it makes machine interpretation of these fields ambiguous.

注意: 既存の応用の中には User-Agent 欄の並びに自身の製品情報を付加するものもあります。 これは、この欄の機械的解釈が曖昧になってしまうので、推奨しません。

Note: Some existing clients fail to restrict themselves to the product token syntax within the User-Agent field.

注意: 既存のクライアントの中には User-Agent 欄の product 字句構文に反しているものもあります。

注: 修正部はすべて RFC 1945→RFC 2068 での変更点。

USEFOR draft (電子ニュース・メッセージ) での規定に関して

[44] product の中身が HTTP では token でしたが、 usefor では value になりました。このおかげで、漢字を使った名前とかも入れられます。

  • [45] User-Agent-content = product-token *( CFWS product-token )
  • [46] User-Agent-header = "User-Agent" ":" SP User-Agent-content *( ";" other-parameter )
  • [47] product-token = value [ "/" product-version ]
  • [48] product-version = value

Client-Specific Web Services by Using User Agent Attributes

[40] UA: にクライアント情報を一杯詰め込んじまおうという Client-Specific Web Services by Using User Agent Attributes http://www.w3.org/TR/NOTE-agent-attributes W3C NOTE 12-30-1997。 仕様考えた会社位しか実装例が無いらしい(w)。

  • [41] User-Agent: AVE-Front/2.0 (BrowserInfo Screen=640x480x256; InputMethod=REMOCON,KEYBOARD; Page=512K; Product=XXXX/Internet-TV; HTML-Level=3.2; Language=ja.JIS; Category=TV; CPU=SH2; Storage=NO;)

[42] 一応 BNF とかでちゃんと定義してある。

  1. Prop_def = "(" "BrowserInfo" Prop_items ")"
  2. Prop_items = Prop_item | Prop_items Prop_item
  3. Prop_item = Prop_name "=" Prop_value ";"
  4. Prop_name = STRING
  5. Prop_value = STRING

The upper case and lower case in describing Prop_name and Prop_value

have to be discriminated.

  1. Prop_name = "Screen" | "InputMethod" | "Page" | "Product" | "HTML-Level" | "Language" | "Category" | "CPU" | "Storage"

"Screen", "InputMethod", "Page", "Product", "HTML-Level" は強く推奨らしいぞ。

"Screen" の値: width (pixels) "x" height (pixels) "x" colors (colors は 2, 4, 8, 16, 32, 64, 128, 256, 32K, 64K, 16M のどれか)

"InputMethod" の値: PEN, KEYBOARD, MOUSE, REMOCON, BUTTON, JOG, ... のどれか(複数可)を、読点区切り。 (例では読点の後に SP が。)

以下説明略。面倒だ:-) 理解する側の実装は (まじめにしよーとすると) 面倒だと思うぞ。値の定義がいい加減だ。

ところで HTML 1.1 ってなに?

[14] 利用者エージェントの識別も参照。

RFC 2616 に適合する例

  • User-Agent: CERN-LineMode/2.15 libwww/2.17b3
  • User-Agent: tin/1.2-PL2
  • User-Agent: tin/1.3-950621beta-PL0 (Unix)
  • User-Agent: tin/unoff-1.3-BETA-970813 (UNIX) (Linux/2.0.30 (i486))
  • User-Agent: tin/pre-1.4-971106 (UNIX) (Linux/2.0.30 (i486))
  • User-Agent: Mozilla/4.02b7 (X11; I; en; HP-UX B.10.20 9000/712)
  • User-Agent: Microsoft-Internet-News/4.70.1161
  • User-Agent: Gnus/5.4.64 XEmacs/20.3beta17 ("Bucharest")
  • User-Agent: Pluto/1.05h (RISC-OS/3.1) NewsHound/1.30
  • User-Agent: inn/1.7.2
  • User-Agent: telnet
  • User-Agent: T-gnus/6.14.4 (based on Gnus v5.8.7) (revision 01) REMI/1.14.1 (=?ISO-8859-4?Q?Mushigawa=F2sugi?=) Chao/1.14.1 (=?ISO-8859-4?Q?Rokujiz?= =?ISO-8859-4?Q?=F2?=) APEL/10.2 MULE XEmacs/21.2 (beta33) (Melpomene) (i686-pc-linux)

USEFOR draft に適合する例

  • HTTP に適合するものは、 usefor にも適合します。
  • User-Agent: "秀丸エディタ"/3.0 "Microsoft(R) Windows(R) Millenium Edition" (Windows Me)
  • [49] User-Agent: "西瓜割"/1.5 Message-pm/1.23

間違った例とこれへの対処について

  • [1]User-Agent: Mozilla/4.7 [ja]C-{C-UDP; EBM-SONY2}
  • [2]User-Agent: DoCoMo/1.0/N503i/c10
  • [3]User-Agent: H-Hash@StudyingHTTP.NET
  • [4]User-Agent: HttpGet/1.0(Win32; GUI; ix86)
  • [5]User-Agent: ネットスケープ 2.0

[34] 間違った例でもそれなりに使われている以上、対応する必要もあるでしょう。 (でも頭が痛いなあ。)

[6] >>1 は、 [ja] 以降の部分で []{}; を使うのを止めるか、全体を comment にしてしまうべきものでしょう。 usefor 的には {} は OK なんですが。あるいは全体を quoted-string にするとか。 読む側としては、不正だから無視するのが一番楽。 どうしても読むなら、 http-token の代わりに *<"/" を除く CHAR> を使うとか。それでも後半が2部分に分かれますが。

[7] >>2 は、 N503i 以降を comment にするか、区切りを "/" じゃなくて "-" にするとかすべきだったと。読む実装側は・・・悩ましい。

[8] >>3 は、 usefor なら quoted-string にしておくとか。 HTTP では無理だねえ。 (こんなところにメイルアドレスなんて入れるなよ。) 読む側は 1 と同じ対処かな。

[9] >>4 は、 comment の前に SP 入れなさい、って話。 HTTP では必須らしいけど、 usefor 的には無くても OK だねぇ。互換性のために入れた方がいいと 思うけど。読む側は無くても解釈できるのが望ましかろう。

[10] >>5 は、実際、生 ISO-2022-JP (ならまだ良い。) とか EUC-JP とか シフトJIS とか入れる人が少なくないらし。御丁寧にも encoded-word 使う人とかもいるらしいねえ。 なんにせよ、 http-token 以外の文字を 使う時は、 quoted-string にしましょ。 (但し usefor only.)

古い版の MacIE は、日本語版では「ネットスケープ 2.0」とかほざくらしい。 シフト JIS でね。英語版では 「Mozilla/2.0」だったと思われ。藁。

[35] http://www.dais.is.tohoku.ac.jp/logs/agentgripes.html からめぼしい(謎)もの。 (適当に上の方から。)

  • [11]User-Agent: A.G.E.N.T. http://masui.net/agent/libwww-perl/5.44
  • [12]User-Agent: Acoon Robot v1.50.001 (www.acoon.de)

[13] >>11 URI 生書きいや〜ん。 >>12 構文としては問題ないけど名前/版形式きぼんぬ。

  • [51] どうせ規格に違反するなら、 >>44 の usefor の改良された方法で quoted-string を使うようにしていった方が、見よう見まねの実装で正しい値を使うようになるんじゃないかと思います。(甘いかな。) ですから新しい実装は、 >>44 の usefor の形式に合致する値を出力するのが望ましいと考えられます。
  • [52] >>51 の考え方からすれば、現実的に表現力が小さいだけで何の役にも立っていない今の HTTP の書式を無理に使うよりは、 >>44 の usefor のより自由な方式に (現状では HTTP RFC と一致しなくても) 切り替えていった方が良いかもしれません。
  • [53] >>10 HTTP/1.0 (RFC1945) では、 %x80-FFISO-8859-1 と解釈しても良いのであって強制ではありませんから、注釈の中ならシフト JIS を入れたり日本語 EUC を入れたり Big5 を入れたりしても問題ありませんね。して欲しくないけど。更に注釈外の生書きはもちろん駄目だけど。
  • [54] >>53 また、 encoded-word を使う場合も注釈内なら構いませんが、注釈外はいけませんね。 (HTTP の場合)
  • [55] 但し、 >>44- のように電子ニュースの手法を使って勝手に拡張してしまうなら、 "=?us-ascii?q?A_Sample_User_Agent?= (ASUA)"/"2.45 =?us-ascii?q?=28Lilly=29?=" みたいなのもありだと思います。 (MIME 的には quoted-string の中に encoded-word を入れるのはよくないんだけど、 HTTP 的にはあまり気にしない。)
  • [56] もちろん、 >>55 の例は例であって、 US-ASCII だけの文字列を encoded-word にするなんてばかげたことは (普通は) しないで下さい、念のため。

関連

[93] User-Agent: には、 DOM API navigator.userAgent からもアクセスできます。

[62] User-Agent: 欄があるプロトコル:

User-Agent: 欄に関係するプロトコル要素:

メモ

[65] UserAgent - iPhone 3G DevWiki (Referenced: ) http://wiki.sohaya.com/index.php/UserAgent

[66] IRC logs: freenode / #whatwg / 20100617 ( 版) http://krijnhoetmer.nl/irc-logs/whatwg/20100617#l-752

[67] IRC logs: freenode / #whatwg / 20100913 ( ( 版)) http://krijnhoetmer.nl/irc-logs/whatwg/20100913

[77] draft-karcz-uuas-00 - Unified User-Agent String (UUAS) ( ( 版)) http://tools.ietf.org/html/draft-karcz-uuas-00

[78] HTML Standard ( ( 版)) http://www.whatwg.org/specs/web-apps/current-work/#client-identification

[80] ( ( 版)) http://www.etsi.org/deliver/etsi_ts/102700_102799/102796/01.02.01_60/ts_102796v010201p.pdf

[94] Re: History of device independence, User-Agent header? ( (Sean B. Palmer 著, 版)) http://lists.w3.org/Archives/Public/public-webhistory/2014Jul/0001.html

[95] RFC 3507 - Internet Content Adaptation Protocol (ICAP) ( ( 版)) http://tools.ietf.org/html/rfc3507#page-14

[96] [whatwg] Controlling the User-Agent header from script ( (Anne van Kesteren 著, 版)) http://lists.w3.org/Archives/Public/public-whatwg-archive/2014Oct/0151.html

[97] The Platform for Privacy Preferences 1.0 (P3P1.0) Specification ( ( 版)) http://www.w3.org/TR/P3P/#other_http_info

[98] RFC 5536 - Netnews Article Format ( ( 版)) http://tools.ietf.org/html/rfc5536#section-3.2.13

[38] RFC 5965 - An Extensible Format for Email Feedback Reports ( 版) http://tools.ietf.org/html/rfc5965#section-3.1

[39] >>38RFC 2616 を引用して message/feedback-report における User-Agent: を規定していますが、ここでは構文上の空白CFWS に置き換えられています。 comment を値の先頭に置くことができます。

[100] Connecting to a streaming endpoint | Twitter Developers ( 版) https://dev.twitter.com/streaming/overview/connecting

If your environment precludes setting the User-Agent field, then set an X-User-Agent header.

[101] `user-agent` header control · Issue #37 · whatwg/fetch ( 版) https://github.com/whatwg/fetch/issues/37

[102] Re: user-agent header control (Anne van Kesteren 著, 版) https://lists.w3.org/Archives/Public/public-webapps/2015AprJun/0043.html

[105] Allow User-Agent to be set, but not omitted. Also group all the heade… · whatwg/fetch@dab09b0 ( 版) https://github.com/whatwg/fetch/commit/dab09b0c483c46324082df1e54b29ed4c9c02162

[123] Issue 310456 - chromium - FTP not working behind Authenticating HTTP Proxy using NTLM (Forefront TMG) - Monorail ( ()) https://bugs.chromium.org/p/chromium/issues/detail?id=310456#c18

[124] ARIB TR-B39 () http://www.arib.or.jp/english/html/overview/doc/4-TR-B39v1_0-1p4.pdf#page=309

HTML ブラウザは、User-Agent ヘッダを図 10-7 に示す書式に合わせて HTTP リクエストのヘ

ッダに含めて送信しなければならない。

User-Agent: <others> <SystemName>/1.0

(<Capability>;<MakerId>;<ModelId>;<MajorVer>;<MinorVer>;

<reserved>) <others>

図 10-7 User-Agent ヘッダ

<SystemName> : "A-PAB"

< Capability > : 受信機の能力を表す。

カンマ(",")区切りで受信機の能力を表す文字列を列挙するものとし、先頭から順に、ブラウザ

表示解像度、ビデオ再生解像度を表現する。それ以降の項目については将来の規定項目とする。

<Capability>=browser_resolution","video_resolution[","reserved]

browser_resolution="2K"|"4K"|"8K"

video_resolution="2K"|"4K"|"8K"

browser_resolution はブラウザで表示可能な最大のコンテンツの解像度を示し、

video_resolution は video 要素によって再生可能な最大の解像度を示す。それぞれ

"2K","4K","8K"のいづれかが記述される。記述がない場合は"2K"と見なす。なお、"4K"に

対応するものは"2K"にも対応し、"8K"に対応するものは"4K"および"2K"にも対応するもの

とする。

<MakerId>:製造メーカーの識別を示す。

MakerId は 6 桁の文字列で、IEEE 規定の 24bit のカンパニーID(OUI)を base16 の文字列

で表したものとする。メーカーに対して OUI は複数存在する可能性があるが、そのうち特定

の1種類を MakerId として使用すること。

< ModelId >:機種を示すコードであり、10 文字までの文字列である。運用は各メーカーに任され

る。

<MajorVer><MinorVer>: 端末のバージョン情報を示し、共に 8 文字までの文字列とする。

ModelId が同一で、動作が異なる端末には、異なるバージョンを付する。運用は各メーカーに

任される。

<reserved>:将来の拡張のための領域

<others>: メーカーが自由に使える領域。ただし、本規定の識別子と区別するため、

<SystemName>で文字列が始まらない必要がある。なお、使用する文字列は RFC 7231 に従

うものとする。

[127] Mozilla/5.0 (Linux; Android 7.0; 502SO Build/39.2.D.0.211; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/58.0.3029.83 Mobile Safari/537.36 インターネット/3.0.2.2 「インターネット」は半角カナ

[128] GitHub API v3 | GitHub Developer Guide () https://developer.github.com/v3/#user-agent-required

All API requests MUST include a valid User-Agent header. Requests with no User-Agent header will be rejected. We request that you use your GitHub username, or the name of your application, for the User-Agent header value.

[15] Chromiumベースの新Microsoft Edgeは接続先に応じて別のブラウザに偽装する | スラド IT () https://it.srad.jp/story/19/04/23/0527248/

[16] 182629 – [macOS, iOS] Expose OS marketing version in UserAgent () https://bugs.webkit.org/show_bug.cgi?id=182629

[22] User Agent Changes | Vivaldi Browser () https://vivaldi.com/ja/blog/user-agent-changes/

[23] Intent to Deprecate and Freeze: The User-Agent string - Google グループ () https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/-2JIRNMWJ7s/yHe4tQNLCgAJ

[24] Freeze the User Agent string - Chrome Platform Status () https://www.chromestatus.com/feature/5704553745874944

[25] User Agent Client Hints · Issue #202 · mozilla/standards-positions () https://github.com/mozilla/standards-positions/issues/202

[30] Remove OS build number from user-agent string - Chrome Platform Status () https://www.chromestatus.com/feature/4558585463832576

[36] Chromium Blog: Changing the Chrome on iOS User Agent for Request Desktop Site (, ) https://blog.chromium.org/2020/09/changing-chrome-on-ios-user-agent-for.html

[43] はてなブログの2020年9月の機能修正・改善をお知らせします(7件) - はてなブログ開発ブログ () https://staff.hatenablog.com/entry/2020/10/01/130000

User-Agentにbotが含まれていたため、Flickrをクロールする際にアクセスができず、画像を取得できない問題がありましたがこの修正により解消しました。

[50] 作ろうiモードコンテンツ:ユーザエージェント | サービス・機能 | NTTドコモ () https://www.nttdocomo.co.jp/service/developer/make/content/spec/useragent/index.html

[57] 作ろうiモード:ユーザエージェント | サービス・機能 | NTTドコモ () https://www.nttdocomo.co.jp/service/developer/make/content/browser/browser2/useragent/index.html

[58] Downgrade User Agent Client Hints to 'harmful' · Issue #552 · mozilla/standards-positions () https://github.com/mozilla/standards-positions/issues/552

[60] User-Agent Reduction origin trial - Chrome Developers (, ) https://developer.chrome.com/blog/user-agent-reduction-origin-trial/

[63] User-Agent Reduction origin trial - Chrome Developers (, ) https://developer.chrome.com/blog/user-agent-reduction-origin-trial/

[64] 1719070 - Add Nimbus client code for "Firefox/100.0" UA string experiment () https://bugzilla.mozilla.org/show_bug.cgi?id=1719070

[69] Apple の緊急セキュリティ対応、一部サイトが正しく表示されなくなる問題 | スラド アップル, https://apple.srad.jp/story/23/07/12/181232/

問題が発生しているのは iOS 16.5.1 (a) / iPadOS 16.5.1 (a) / macOS Ventura 13.4.1 (a) で、それぞれ問題を修正した iOS 16.5.1 (b) / iPadOS 16.5.1 (b) / macOS Ventura 13.4.1 (b) を間もなくリリースするとのこと。

問題の原因は Safari のユーザーエージェント文字列に「(a)」が含められたこととみられる。これにより、Facebook や Instagram などのサイトが古いバージョンのブラウザーと誤認識してしまうようだ。