directory search
Guides Access control CORS Authentication Browser detection using the user agent Caching Caching FAQ Compression Conditional requests Connection management in HTTP 1.x Content negotiation Content negotiation: List of default Accept values Cookies CSP Messages Overview Protocol upgrade mechanism Proxy servers and tunneling Proxy servers and tunneling: Proxy Auto-Configuration (PAC) file Public Key Pinning Range requests Redirections Resources and specifications Resources and URIs Response codes Server-Side Access Control Session Guides: Basics Basics of HTTP Choosing between www and non-www URLs Data URIs Evolution of HTTP Identifying resources on the Web MIME Types MIME types: Complete list of MIME types CSP Content-Security-Policy Content-Security-Policy-Report-Only CSP: base-uri CSP: block-all-mixed-content CSP: child-src CSP: connect-src CSP: default-src CSP: font-src CSP: form-action CSP: frame-ancestors CSP: frame-src CSP: img-src CSP: manifest-src CSP: media-src CSP: object-src CSP: plugin-types CSP: referrer CSP: report-uri CSP: require-sri-for CSP: sandbox CSP: script-src CSP: style-src CSP: upgrade-insecure-requests CSP: worker-src Headers Accept Accept-Charset Accept-Encoding Accept-Language Accept-Ranges Access-Control-Allow-Credentials Access-Control-Allow-Headers Access-Control-Allow-Methods Access-Control-Allow-Origin Access-Control-Expose-Headers Access-Control-Max-Age Access-Control-Request-Headers Access-Control-Request-Method Age Allow Authorization Cache-Control Connection Content-Disposition Content-Encoding Content-Language Content-Length Content-Location Content-Range Content-Type Cookie Cookie2 Date DNT ETag Expect Expires Forwarded From Headers Host If-Match If-Modified-Since If-None-Match If-Range If-Unmodified-Since Keep-Alive Large-Allocation Last-Modified Location Origin Pragma Proxy-Authenticate Proxy-Authorization Public-Key-Pins Public-Key-Pins-Report-Only Range Referer Referrer-Policy Retry-After Server Set-Cookie Set-Cookie2 SourceMap Strict-Transport-Security TE Tk Trailer Transfer-Encoding Upgrade-Insecure-Requests User-Agent User-Agent: Firefox Vary Via Warning WWW-Authenticate X-Content-Type-Options X-DNS-Prefetch-Control X-Forwarded-For X-Forwarded-Host X-Forwarded-Proto X-Frame-Options X-XSS-Protection Methods CONNECT DELETE GET HEAD Methods OPTIONS PATCH POST PUT Status 100 Continue 101 Switching Protocols 200 OK 201 Created 202 Accepted 203 Non-Authoritative Information 204 No Content 205 Reset Content 206 Partial Content 300 Multiple Choices 301 Moved Permanently 302 Found 303 See Other 304 Not Modified 307 Temporary Redirect 308 Permanent Redirect 400 Bad Request 401 Unauthorized 403 Forbidden 404 Not Found 405 Method Not Allowed 406 Not Acceptable 407 Proxy Authentication Required 408 Request Timeout 409 Conflict 410 Gone 411 Length Required 412 Precondition Failed 413 Payload Too Large 414 URI Too Long 415 Unsupported Media Type 416 Range Not Satisfiable 417 Expectation Failed 426 Upgrade Required 428 Precondition Required 429 Too Many Requests 431 Request Header Fields Too Large 451 Unavailable For Legal Reasons 500 Internal Server Error 501 Not Implemented 502 Bad Gateway 503 Service Unavailable 504 Gateway Timeout 505 HTTP Version Not Supported 511 Network Authentication Required Status
characters

本文档描述了 Firefox 4 及更高版本中使用的用户代理字符串以及基于 Gecko 2.0 和更高版本的应用程序。有关 Gecko 2.0 中字符串更改的详细信息,请参阅 Firefox 4的最终用户代理字符串(博客文章)。关于用户代理嗅探和这个 Hacks博客文章,另请参阅此文档。

一般形式

Firefox 本身的 UA 字符串被分解为四个组件:

Mozilla / 5.0(platform ; rv:geckoversion)Gecko / geckotrailFirefox / firefoxversion

  • Mozilla / 5.0是一款表示浏览器兼容 Mozilla 的通用标记,并且几乎适用于今天的所有浏览器。

  • 平台描述浏览器运行的本地平台(例如Windows,Mac,Linux 或 Android)以及它是否是手机。Firefox OS 手机只是说“手机”; 网络就是平台。请注意,平台可以由多个“;”分隔的令牌组成。请参阅下面的进一步细节和示例。

  • rv:geckoversion表示 Gecko 的发布版本(例如“17.0”)。在最近的浏览器中,geckoversionfirefoxversion相同。

  • Gecko / geckotrail表明浏览器基于 Gecko。

  • 在桌面上,geckotrail是固定字符串“20100101”

  • Firefox / firefoxversion表示浏览器是 Firefox,并提供版本(例如“ 17.0”)。

  • 从手机上的 Firefox 10开始,geckotrailfirefoxversion 一样

对于基于 Gecko 的浏览器(如果您必须嗅探浏览器引擎而不是使用功能检测),推荐使用 “ Gecko ” 和 “ rv: ”字符串,因为其他浏览器包含 “ like Gecko “ 令牌。

对于其他基于 Gecko 的产品,字符串可以采用两种形式之一,其中令牌具有相同的含义,但下面提到的除外:

Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail appname/appversion

Mozilla / 5.0(platform ; rv:geckoversion)Gecko / geckotrailFirefox / firefoxversionappname / appversion

  • appname / appversion指示应用程序名称和版本。例如,这可以是 “ Camino / 2.1.1 ”或“ SeaMonkey / 2.7.1 ”。

  • Firefox / firefoxversion是一个可选的兼容性令牌,一些基于 Gecko 的浏览器可能会选择合并,以实现与期望Firefox的网站的最大兼容性。firefoxversion通常会代表与给定的 Gecko 版本相对应的等效 Firefox 版本。一些基于 Gecko 的浏览器可能不会使用此令牌; 出于这个原因,嗅探器应该寻找壁虎 - 而不是 Firefox!此标记是否显示由 “general.useragent.compatMode.firefox” 布尔值前缀控制。

移动和平板电脑指标

需要 Gecko 11.0(Firefox 11.0 / Thunderbird 11.0 / SeaMonkey 2.8)

UA 字符串的平台部分指示 Firefox 是否在手机尺寸或平板电脑设备上运行。当 Firefox 在具有手机外形的设备上运行时,会出现Mobile;令牌在 UA 字符串的平台部分。当 Firefox 在平板电脑设备上运行时,有一款平板电脑;代替UA字符串的平台部分中的令牌。例如:

Mozilla/5.0 (Android 4.4; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0Mozilla/5.0 (Android 4.4; Tablet; rv:41.0) Gecko/41.0 Firefox/41.0

版本号不相关。避免基于这些推断材料。

将内容定位到设备外形的首选方式是使用 CSS Media Queries。但是,如果您使用 UA 嗅探到目标内容到设备的外形尺寸,请认准摩比(包括Opera移动,它采用“牧高笛”)手机的外形和你没有承担的 “Android” 和设备之间的任何关联构成因素。这样,如果/当 Firefox 在其他手机/平板电脑操作系统上发布或 Android 用于笔记本电脑时,您的代码将可以正常工作。此外,请使用触摸检测来寻找触摸设备,而不是寻找“手机”或“平板电脑”,因为可能有触摸设备不是平板电脑。

Firefox OS 设备在没有任何操作系统指示的情况下自行识别; 例如: “Mozilla / 5.0(Mobile; rv:15.0)Gecko / 15.0 Firefox / 15.0”。网络是平台。

Windows

Windows 用户代理具有以下变体,其中 xy 是 Windows NT 版本(例如 Windows NT 6.1)。

Windows version

Gecko user agent string

Windows NT on x86

Mozilla/5.0 (Windows NT x.y; rv:10.0) Gecko/20100101 Firefox/10.0

Windows NT, Win64 on x64

Mozilla/5.0 (Windows NT x.y; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0

Windows NT, WOW64

Mozilla/5.0 (Windows NT x.y; WOW64; rv:10.0) Gecko/20100101 Firefox/10.0

Macintosh

这里,xy 是 Mac OS X 的版本(例如,Mac OS X 10.6)。

Mac OS X version

Gecko user agent string

Mac OS X on Intel x86 or x86_64

Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:10.0) Gecko/20100101 Firefox/10.0

Mac OS X on PowerPC

Mozilla/5.0 (Macintosh; PPC Mac OS X x.y; rv:10.0) Gecko/20100101 Firefox/10.0

Linux

Linux 是一个更多元化的平台。下面给出几个常见的例子。

Linux version

Gecko user agent string

Linux desktop, i686

Mozilla/5.0 (X11; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0

Linux desktop, x86_64

Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0

Linux desktop, i686 running on x86_64

Mozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0) Gecko/20100101 Firefox/10.0

Nokia N900 Linux mobile, on the Fennec browser

Mozilla/5.0 (Maemo; Linux armv7l; rv:10.0) Gecko/20100101 Firefox/10.0 Fennec/10.0

Android(版本40及以下)

Form factor

Gecko user agent string

Phone

Mozilla/5.0 (Android; Mobile; rv:40.0) Gecko/40.0 Firefox/40.0

Tablet

Mozilla/5.0 (Android; Tablet; rv:40.0) Gecko/40.0 Firefox/40.0

Android(版本41及以上)

从版本41开始,适用于 Android 的 Firefox 将包含 Android 版本作为平台令牌的一部分。为了提高互操作性,如果浏览器运行在低于4的版本上,它将报告4.4。Android 版本4及以上将准确报告版本。请注意,相同的 Gecko 具有相同的功能,可以运送到所有版本的 Android。

Form factor

Gecko user agent string

Phone

Mozilla/5.0 (Android 4.4; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0

Tablet

Mozilla/5.0 (Android 4.4; Tablet; rv:41.0) Gecko/41.0 Firefox/41.0

Firefox OS

Form factor

Gecko user agent string

Phone

Mozilla/5.0 (Mobile; rv:26.0) Gecko/26.0 Firefox/26.0

Tablet

Mozilla/5.0 (Tablet; rv:26.0) Gecko/26.0 Firefox/26.0

TV

Mozilla/5.0 (TV; rv:44.0) Gecko/44.0 Firefox/44.0

Device-specific

Mozilla/5.0 (Mobile; nnnn; rv:26.0) Gecko/26.0 Firefox/26.0

设备特定的用户代理字符串

尽管 Mozilla非常消极,但一些手机制造商不幸在其设备的 UA 字符串中包含代表其设备 ID 的令牌。如果是这种情况,则 Firefox OS UA 字符串将看起来像上表中的设备特定字符串,其中nnnn ;是设备的制造商代码(请参阅指南)。其中一些我们注意到的形式是 “NexusOne”,“ZTEOpen”或“Open C;”(注意放置空间也是不鼓励的)。我们提供此信息以协助您的 UA 检测逻辑,但 Mozilla 不鼓励检测 UA 字符串中的设备 ID。

这是一个 JavaScript 正则表达式,它将检测所有移动设备,包括设备 ID 在其 UA 字符串中的设备:

/mobi/i

这使其不区分i大小写,mobi匹配所有移动浏览器。

Firefox OS 版本号

虽然 Firefox OS 的版本号未包含在 UA 字符串中,但可以根据 UA 字符串中存在的 Gecko 版本号推断版本信息。

Firefox OS version number

Gecko version number

1.0.1

18.0

1.1

18.1

1.2

26.0

1.3

28.0

1.4

30.0

2.0

32.0

2.1

34.0

2.2

37

2.5

44

通过查看 Mercurial 存储库名称很容易找到对应关系:从mozilla-b2gFirefox 开始的版本库是 Firefox OS 的版本库,并且 Firefox OS和Gecko 版本都以它们的名字命名。

Firefox OS 具有四位数版本号:XXXY 前两位数字由 Mozilla 产品团队拥有,并表示具有新功能(例如 v1.1,1.2等)的版本。第三位数字随着常规版本标签(大约每6周)增加一次安全更新,第四位数字由 OEM 拥有。

适用于 iOS 的 Firefox

适用于 iOS 的 Firefox 使用默认 Mobile Safari UA 字符串,并具有附加的FxiOS / <版本>标记,这与 Chrome for iOS标识自身的方式类似。

Form factor

Firefox for iOS user agent string

iPod

Mozilla/5.0 (iPod touch; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4

iPhone

Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4

iPad

Mozilla/5.0 (iPad; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4

Firefox Web Runtime

Web Runtime 使用与桌面版 Firefox 相同的用户代理字符串。

其他基于 Gecko 的浏览器

这些是来自不同平台上其他基于 Gecko 的浏览器的一些示例UA字符串。请注意,其中很多尚未在 Gecko 2.0 上发布!

Browser

Gecko user agent string

Firefox for Maemo (Nokia N900)

Mozilla/5.0 (Maemo; Linux armv7l; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 Fennec/10.0.1

Camino on Mac

Mozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Camino/2.2.1

SeaMonkey on Windows

Mozilla/5.0 (Windows NT 5.2; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 SeaMonkey/2.7.1

SeaMonkey on Mac

Mozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 SeaMonkey/2.7.1

SeaMonkey on Linux

Mozilla/5.0 (X11; Linux i686; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 SeaMonkey/2.7.1

应用程序,供应商和扩展的实施说明

在 Firefox 4 和 Gecko 2.0 之前,扩展可以通过general.useragent.extra.identifier首选项添加用户代理部分,(参见过时的用户代理字符串参考)。但是自从 bug 581008 以来,这是不可能的。

从前,特定插件,插件或扩展程序添加了用户代理部件以通知其安装的站点。推荐的做法是,如果它是绝对必要的(记住它会减慢每个请求的速度)是设置一个自定义 HTTP 头。

Previous article: Next article: