亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

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

向不同的瀏覽器提供不同的網(wǎng)頁或服務(wù)通常是一個壞主意。無論用戶使用哪種瀏覽器或設(shè)備,Web都應(yīng)該可供所有人訪問。有很多方法可以根據(jù)功能的可用性而不是針對特定的瀏覽器來開發(fā)自己的網(wǎng)站以逐步提升自身。

但瀏覽器和標(biāo)準(zhǔn)并不完美,并且仍然存在一些需要檢測瀏覽器的邊緣情況。使用用戶代理來檢測瀏覽器看起來很簡單,但做得很好實(shí)際上是一個非常困難的問題。本文件將指導(dǎo)您盡可能正確地做到這一點(diǎn)。

這值得重新思考:使用用戶代理嗅探非常不好。您幾乎總能找到更好,更廣泛兼容的方式來解決您的問題!

使用瀏覽器檢測前的注意事項

當(dāng)考慮使用用戶代理字符串來檢測正在使用的瀏覽器時,如果可能的話,您的第一步是盡量避免它。首先嘗試確定你為什么要這樣做。

你是否試圖在某個版本的瀏覽器中解決特定的錯誤?在專門的論壇中查看或詢問:你不可能成為第一個遇到這個問題的人。另外,專家或者僅僅是擁有另一種觀點(diǎn)的人,可以為您提供解決錯誤的方法。如果這個問題看起來并不常見,那么值得檢查這個bug是否已經(jīng)通過他們的bug跟蹤系統(tǒng)(Mozilla ; WebKit ; Opera)。瀏覽器制造商確實(shí)注意到錯誤報告,分析可能會暗示其他錯誤的解決方法。您是否試圖檢查是否存在特定功能?您的網(wǎng)站需要使用某些瀏覽器不具備的特定Web功能,還沒有支持,你想發(fā)送這些用戶到一個功能較少的舊網(wǎng)站,但你知道會工作。這是使用用戶代理檢測的最壞原因,因?yàn)樽罱K所有其他瀏覽器都會迎頭趕上。你應(yīng)該盡量避免在這種情況下使用用戶代理嗅探,而是做功能檢測。是否要根據(jù)使用哪種瀏覽器提供不同的HTML?這通常是一種不好的做法,但在某些情況下這是必要的。在這些情況下,你應(yīng)該首先分析你的情況,確保它確實(shí)是必要的。<div><span>元素?成功使用用戶代理檢測的困難值得對HTML的純度造成一些干擾。此外,重新考慮您的設(shè)計:您可以使用漸進(jìn)增強(qiáng)或流體布局來幫助消除這種需求嗎?

避免用戶代理檢測

如果您想盡量避免使用用戶代理檢測,則在某些情況下有選項!

功能檢測功能檢測是您不試圖找出哪個瀏覽器正在呈現(xiàn)您的頁面的位置,而是檢查您需要的特定功能是否可用。如果不是,則使用后備。但是,在極少數(shù)情況下,如果實(shí)際上需要瀏覽器檢測,請不要使用功能檢測,因?yàn)槠渌麨g覽器將來可能會實(shí)現(xiàn)此功能,但方式不同。由此造成的錯誤可能難以找到并修復(fù)。進(jìn)度增強(qiáng)此設(shè)計技術(shù)涉及使用自下而上的方法在“圖層”中開發(fā)您的網(wǎng)站,從更簡單的圖層開始,并在連續(xù)圖層中提高網(wǎng)站的功能,每個使用更多features.Graceful降級這是一種自上而下的方法,您可以使用所需的所有功能構(gòu)建盡可能好的站點(diǎn),然后調(diào)整它,使其在舊版瀏覽器上工作。這可能比漸進(jìn)式增強(qiáng)更難,效果也更差,但在某些情況下可能會有用。

用戶代理的哪一部分包含您正在查找的信息

由于用戶代理字符串的不同部分沒有統(tǒng)一性,這是棘手的部分。

瀏覽器名稱

當(dāng)人們說他們想要“瀏覽器檢測”時,通常他們實(shí)際上想要“渲染引擎檢測”。您是否真的想檢測Firefox,而不是SeaMonkey或Chrome,而不是Chromium?或者你真的只想看看瀏覽器是使用Gecko還是WebKit渲染引擎?如果這是您需要的,請參閱頁面的更下方。

大多數(shù)瀏覽器都使用BrowserName / VersionNumber格式設(shè)置名稱和版本,但I(xiàn)nternet Explorer明顯例外。但是,由于該名稱不是該格式的用戶代理字符串中的唯一信息,因此您無法發(fā)現(xiàn)瀏覽器的名稱,只能檢查您正在查找的名稱。但請注意,有些瀏覽器在說謊:例如Chrome報告Chrome和Safari。因此,為了檢測Safari,您必須檢查Safari字符串以及Chrome字符串是否存在,Chromium經(jīng)常將自己報告為Chrome,或者Seamonkey有時會將其自身報告為Firefox。

另外請注意,不要在BrowserName上使用簡單的正則表達(dá)式,用戶代理還包含Keyword / Value語法之外的字符串。例如,Safari和Chrome包含“像Gecko”這樣的字符串。


必須包含

不得包含


火狐

火狐/ XYZ

Seamonkey的/ XYZ


Seamonkey

Seamonkey的/ XYZ



Chrome

Chrome / XYZ

Chromium / XYZ


Chromium

Chromium/ XYZ



蘋果瀏覽器

Safari瀏覽器/ XYZ

Chrome / xyz或Chromium / xyz

Safari提供了兩個版本號,一個是Safari / xyz標(biāo)記中的技術(shù),一個是用戶友好的版本/ xyz標(biāo)記

Opera

OPR / xyz 1 Opera / xyz 2


1 Opera 15+(基于閃爍的引擎)2 Opera 12-(基于Presto的引擎)

Internet Explorer

; MSIE xyz;


Internet Explorer不會以BrowserName / VersionNumber格式放置其名稱

當(dāng)然,絕對不能保證其他瀏覽器不會劫持一些這樣的東西(比如過去Chrome就劫持了Safari字符串)。這就是為什么使用用戶代理字符串進(jìn)行瀏覽器檢測是不可靠的,只能通過檢查版本號來完成(劫持過去版本的可能性較小)。

瀏覽器版本

瀏覽器版本通常(但并非總是)放入用戶代理字符串中的BrowserName / VersionNumber標(biāo)記的值部分。這對于Internet Explorer(將版本號恰好放在MSIE令牌之后)和Opera 10之后的Opera添加了版本/ 版本號令牌當(dāng)然不是這種情況。

同樣,請務(wù)必為您正在尋找的瀏覽器選擇正確的標(biāo)記,因?yàn)椴荒鼙WC其他將包含有效的數(shù)字。

渲染引擎

如前所見,在大多數(shù)情況下,尋找渲染引擎是更好的方法。這將有助于不排除鮮為人知的瀏覽器。共享一個通用渲染引擎的瀏覽器將以同樣的方式顯示一個頁面:一個公平的假設(shè)是,一個工作在另一個工作中。

有五個主要的渲染引擎:Trident,Gecko,Presto,Blink和WebKit。由于嗅探渲染引擎名稱很常見,因此許多用戶代理添加了其他渲染名稱以觸發(fā)檢測。因此,在檢測渲染引擎時注意不要觸發(fā)誤報。


必須包含


壁虎

壁虎/ XYZ


WebKit

AppleWebKit / XYZ

請注意,WebKit瀏覽器會添加一個'像Gecko'字符串,如果檢測不夠謹(jǐn)慎,可能會觸發(fā)Gecko的誤報。

Presto

Opera / XYZ

注意:Presto不再用于Opera瀏覽器版本> =版本15(請參閱'閃爍')

Trident

Trident / XYZ

Internet Explorer將此令牌放入用戶代理字符串的注釋部分

Trident

Chrome/ XYZ


渲染引擎版本

大多數(shù)渲染引擎將版本號放入RenderingEngine / VersionNumber令牌中,但Gecko明顯例外。Gecko將Gecko版本號放在rv:字符串后面的User Agent的注釋部分。從手機(jī)版的Gecko 14和桌面版的Gecko 17中,它也將這個值放在Gecko/version令牌中(以前的版本中有構(gòu)建日期,然后是一個名為GeckoTrail的固定日期)。

OS

操作系統(tǒng)在大多數(shù)用戶代理字符串中給出(盡管不是像Firefox OS這樣的網(wǎng)絡(luò)集中式平臺),但是格式各不相同。它是用戶代理注釋部分中兩個分號之間的固定字符串。這些字符串對于每個瀏覽器都是特定的。它們表示操作系統(tǒng),但也常常是其依賴硬件(32位或64位或Intel / PPC for Mac)的版本和信息。

就像在所有情況下一樣,這些字符串將來可能會發(fā)生變化,應(yīng)該將它們僅用于檢測已發(fā)布的瀏覽器。當(dāng)新的瀏覽器版本出現(xiàn)時,必須進(jìn)行技術(shù)調(diào)查以適應(yīng)腳本。

手機(jī),平板電腦或桌面

執(zhí)行用戶代理嗅探的最常見原因是確定瀏覽器運(yùn)行的設(shè)備類型。目標(biāo)是為不同的設(shè)備類型提供不同的HTML。

  • 切勿假設(shè)瀏覽器或渲染引擎僅在一種設(shè)備上運(yùn)行。特別是不要為不同的瀏覽器或渲染引擎設(shè)置不同的默認(rèn)值。

  • 切勿使用OS令牌來定義瀏覽器是否在移動設(shè)備,平板電腦或臺式機(jī)上。操作系統(tǒng)可能運(yùn)行在多種類型的設(shè)備上(例如,Android可以在平板電腦以及手機(jī)上運(yùn)行)。

下表總結(jié)了主要瀏覽器供應(yīng)商表示其瀏覽器在移動設(shè)備上運(yùn)行的方式:

瀏覽器

規(guī)則

Mozilla(Gecko,F(xiàn)irefox)

手機(jī)或平板電腦令牌在評論中。

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

基于WebKit的(Android,Safari)

評論之外的移動Safari標(biāo)記。

Mozilla / 5.0(Linux; U; Android 4.0.3; de-ch; HTC Sensation Build / IML74K)AppleWebKit / 534.30(KHTML,如Gecko)Version / 4.0 Mobile Safari / 534.30

基于閃爍(Chromium,Google Chrome,Opera 15+)

評論之外的移動Safari標(biāo)記

Mozilla / 5.0(Linux; Android 4.4.2); Nexus 5 Build / KOT49H)AppleWebKit / 537.36(KHTML,如Gecko)Chrome / 33.0.1750.117 Mobile Safari / 537.36 OPR / 20.0.1396.72047

基于Presto(Opera 12-)

Opera中的Opera Mobi / xyz令牌(Opera 12-)

Opera / 9.80(Android 2.3.3; Linux; Opera Mobi / ADR-1111101157; U; es-ES)Presto / 2.9.201版本/ 11.50

Internet Explorer

IEMobile / xyz令牌的評論。

Mozilla / 5.0(兼容; MSIE 9.0; Windows Phone OS 7.5; Trident / 5.0; IEMobile / 9.0)

總之,我們建議在用戶代理的任何位置查找字符串“Mobi”以檢測移動設(shè)備。

如果設(shè)備足夠大以至于沒有標(biāo)記“Mobi”,則應(yīng)該為您的桌面站點(diǎn)提供服務(wù)(作為最佳做法,無論如何應(yīng)該支持觸摸輸入,因?yàn)殡S著觸摸屏出現(xiàn)更多臺式機(jī))。

Previous article: Next article: