基于 http 请求在 Web 应用程序中检测移动浏览器的标准方法
Posted
技术标签:
【中文标题】基于 http 请求在 Web 应用程序中检测移动浏览器的标准方法【英文标题】:Standard way to detect mobile browsers in a web application based on the http request 【发布时间】:2010-09-13 15:00:00 【问题描述】:我们开始为企业电子商务 web 应用程序(基于 Java/Servlet)提供移动浏览器支持。当然有很多决定要做,但在我看来,基石是能够可靠地检测移动浏览器,并相应地决定要返回的内容。是否有一种标准方法可以根据 http 请求(快速)做出此决定,并在理想情况下收集有关发出请求的给定浏览器和设备的更多信息(屏幕大小、html 功能等?)。
如果有人已经走上了采用现有大型企业 web 应用程序并从开发方面构建移动浏览器支持的路径,我也将不胜感激。
[edit] 我当然了解请求标头,并且有关标准用户代理数据库的信息是一个很大的帮助。对于那些谈论“其他”请求标头属性的人,如果您可以包含类似的标准化名称/值资源,那将是一个很大的帮助。
[edit] 一些用户提出了一些解决方案,这些解决方案涉及通过网络调用某些 Web 服务来进行检测。虽然我确信这可行,但它对于企业电子商务网站来说并不是一个好的解决方案,原因有两个:1)速度。对第三方的每个页面请求都通过网络调用会产生巨大的性能影响。 2) 依赖/合法。我们会将我们的网站响应时间和关键功能与他们的服务联系起来,出于法律和风险原因,这很糟糕。
【问题讨论】:
你可以在***.com/questions/6844020/…看到一些想法 【参考方案1】:标准方法不是检查用户代理吗?这是一个database of user agents,您可以使用它来检测移动浏览器。
【讨论】:
我没有意识到这些有一个积极维护的参考。谢谢。 Java 的 WURFL 是一团糟。祝您好运找到给定的 Java 绑定以供下载。 WURFL 是一个内存猪。还有 15 MB XML?但它确实做到了。 您可以在 (51degrees.codeplex.com) 或通过 ApacheMobileFilter (fiftyone.apachemobilefilter.org) 尝试 51degrees.mobi。二进制数据格式非常高效。 请注意,未经许可,您不能将此文件用于商业目的。【参考方案2】:@David 的回答提到使用 WURFL——这可能是你最好的选择。但是请注意,成功率通常在 60% 左右(根据我和其他人的经验)。随着运营商不断更改 UA 以及现有设备配置文件的数量(超过 60,000 个?),没有万无一失的方法可以获取您想要的所有正确数据。
在严重依赖设备数据库之前,请稍加警告。我会尝试通过允许用户更改会话选项来保持用户的选项打开,以防我猜错了。
【讨论】:
+1 建议允许用户选择自己的体验【参考方案3】:您可以使用 Modernizer 来检测浏览器功能
【讨论】:
【参考方案4】:在寻找检测移动设备的正确方法几天后,我决定保持简单 [愚蠢],我将在我的索引页面上放置一个“移动设备站点”按钮......只需单击一下走开!!
【讨论】:
【参考方案5】:虽然您可以通过其用户代理检测移动浏览器,但 PC 平台上的浏览器大战表明,嗅探用户代理并不是一件好事。
理想情况下,应该根据媒体类型应用特定样式,或者应该根据用户代理以外的标头发送不同的答案 - 例如接受标头,它告诉哪些类型的内容浏览器偏好。
现在,通过浏览器嗅探编写一个与 iPhone 和 Opera 兼容的网站可能就足够了 - 但谷歌的 android 即将到来,还有许多其他手机将拥有接近 iPhone 的浏览器功能在不久的将来,如果从头开始开发一个不支持这些设备的移动网站将是一种浪费。
【讨论】:
【参考方案6】:This article(及其follow-up)看起来不错。
【讨论】:
【参考方案7】:Detect Mobile Browsers - 各种编程语言的 sn-ps。
【讨论】:
【参考方案8】:以下轻量级 Apache 配置做得很好,如果用户更喜欢 PC 版本,它会记住用户的偏好
<VirtualHost (your-address-binding)>
(your-virtual-host-configuration)
RewriteEngine On
RewriteCond %QUERY_STRING !ui=pc
RewriteCond %HTTP_COOKIE !ui=pc
RewriteCond %HTTP_USER_AGENT "^.*(iphone|ipod|ipad|android|symbian|nokia|blackberry| rim |opera mini|opera mobi|windows ce|windows phone|up\.browser|netfront|palm-|palm os|pre\/|palmsource|avantogo|webos|hiptop|iris|kddi|kindle|lg-|lge|mot-|motorola|nintendo ds|nitro|playstation portable|samsung|sanyo|sprint|sonyericsson|symbian).*$" [NC,OR]
RewriteCond %HTTP_USER_AGENT "^(alcatel|audiovox|bird|coral|cricket|docomo|edl|huawei|htc|gt-|lava|lct|lg|lynx|mobile|lenovo|maui|micromax|mot|myphone|nec|nexian|nook|pantech|pg|polaris|ppc|sch|sec|spice|tianyu|ustarcom|utstarcom|videocon|vodafone|winwap|zte).*$" [NC]
RewriteRule /(.*) http://bemoko.com/$1 [L]
RewriteCond %QUERY_STRING "ui=pc"
RewriteRule ^/ - [CO=ui:pc:(your-cookie-domain):86400:/]
RewriteCond %QUERY_STRING "ui=default"
RewriteRule ^/ - [CO=ui:default:(your-cookie-domain):86400:/]
</VirtualHost>
更多背景信息@@http://bemoko.com/training.team/help/team/pc-to-mobile-redirect
【讨论】:
【参考方案9】:我提出了一个基于 uaprof 和用户代理的免费检测系统: http://www.mobilemultimedia.be 当 UAprof 可用时,它应该是检测的主键,因为同一个 uaprof 通常有多个用户代理。如果您想自己管理,则应该选择 Wurfl,因为您可以下载整个数据库并在本地自行管理。
【讨论】:
【参考方案10】:当我最近有类似的需求时,我发现this code 使用HTTP_X_WAP_PROFILE
、HTTP_ACCEPT
和HTTP_USER_AGENT
来识别浏览器是移动浏览器还是非移动浏览器。它是 php,但可以很容易地转换为您需要的任何内容(我在经典 ASP 的 VBScript 中实现了它)。
具有讽刺意味的是,我最终没有使用该代码,因为我们决定为移动和非移动用户提供特定的 URL,但在我测试它时它确实有效...
【讨论】:
【参考方案11】:您将从请求标头中获得大部分信息,例如浏览器、设备、接受的语言、接受的格式等。上面提到的用户代理是请求头的一部分。
【讨论】:
【参考方案12】:好的,这是一个非常简单的答案——让用户决定怎么样?在您登录到您的应用程序时,提供指向移动网站的链接。在移动站点上,提供“返回主站点”的链接 - 在您的移动设备上尝试 www.fazolis.com - 他们做得很好。
然后,在从浏览器站点到移动站点的链接上,注册他们的“投票”和他们的用户代理。您可以建立自己的可靠列表,列出需要移动网站的您的 客户。使用这些与这些移动设备的屏幕尺寸规格相结合的方法,您可以构建一些非常好的逻辑以获得令人满意的用户体验。我永远不会在网络资源上发布像这样基本的东西。
哦,在您的“移动网站”上——如果您的应用程序语义写得很好,那么您应该能够为移动设备和浏览器提供一个网站,而不必编写两个单独的页面集。只是想一想 - 值得为以后节省时间而付出额外的思考和努力。
【讨论】:
【参考方案13】:我在这里看不到它,但我目前正在研究的另一个选项是www.detectmobilebrowser.com
【讨论】:
【参考方案14】:最简单的方法是创建一个带有与移动浏览器关联的常规标签的数组。至少大多数移动用户代理必须有mobile、mini、nokia、java ME、android、iphone、mobile OS等字样。如果与用户代理匹配,使用php strpos,在页面顶部打印一个移动按钮.留给用户选择。我喜欢完整的网站,因为我的移动浏览器给了我相同的体验,除了我大部分时间需要缩放或滚动。
【讨论】:
【参考方案15】:您必须使用先前定义的列表检查用户代理字符串,like this one
【讨论】:
【参考方案16】:您可以使用 web 服务来检测手机浏览,例如 phonedetection.com。
【讨论】:
出于性能原因,对每个页面请求进行网络调用是不可行的【参考方案17】:事实是仅仅依靠用户代理不足以检测移动浏览器。
当然,几年前你可以搜索某些字符串并猜测它是诺基亚之类的,但现在有这么多手机,而且有这么多假装是东西,它们并不是更复杂的东西需要。
我在link text找到了一个很棒的网站,它基于 MTV 用于所有移动网站的相同解决方案。它非常好,因为它具有独立于设备的标记语言,但更重要的是它们提供了对 isMobileDevice() 的 Web 服务调用。
只需查看手册,然后查看“它是如何工作的”。
我一直将它用于我的客户网站,但尚未找到无法准确检测到的移动浏览器。完全眼花缭乱!
【讨论】:
出于性能原因,这是不合理的 - '使用 WAPL 非常简单,只需要使用 SOAP 或 REST Web 服务将有效的 WAPL 传递给 Wapple 的服务器。 Web 服务服务器使用标记进行响应,以便您输出到设备。您可以完全控制内容、设计和展示元素。' 可能需要指出,回答者是发布 wapl.info 和 wapple 提供的其他相关服务的组织“wapple”的 CTO。 gomonews.com/richwapple【参考方案18】:刚刚遇到Device and feature detection on the mobile web,内容如下:
-
使用设备和功能检测来改善移动网络上的用户体验
设备检测简介
移动网站设计方法
-
什么都不做
提供通用移动网站
在设计时考虑到移动和适应性
-
设备分组
内容改编
-
服务器端适配
客户端适配
服务器端用户代理 (UA) 和标头查找
服务器端UA字符串结合设备数据库查找
服务器端用户代理配置文件 (UAProf) 检测
基于 javascript 技术的检测
CSS 媒体类型
CSS 媒体查询
-
重定向+手动链接
着陆页 + 手动链接
【讨论】:
【参考方案19】:您可以使用 WURFL API 来检测设备类型
http://wurfl.sourceforge.net/wurfl_schema.php
或Modernizer 检测浏览器功能
【讨论】:
以上是关于基于 http 请求在 Web 应用程序中检测移动浏览器的标准方法的主要内容,如果未能解决你的问题,请参考以下文章
我如何检测请求是不是来自我的 asp.net MVC 3 中的移动浏览器