Browser 基于http请求在web应用程序中检测移动浏览器的标准方法

Browser 基于http请求在web应用程序中检测移动浏览器的标准方法,browser,mobile,enterprise,web-applications,Browser,Mobile,Enterprise,Web Applications,我们正开始为企业电子商务webapp(基于Java/Servlet)提供移动浏览器支持。当然有很多决定要做,但在我看来,基石是能够可靠地检测移动浏览器,并对要返回的内容做出相应的决定。是否有一种标准方法(快速)基于http请求进行此确定,并理想地收集关于发出请求的给定浏览器和设备的更多信息(屏幕大小、html功能等) 我还希望有人能够提供任何有用的补充信息,这些信息都是从开发方面获取现有大型企业webapp并设计出移动浏览器支持的 [编辑]我当然理解请求标题,关于标准用户代理数据库的信息是一个很

我们正开始为企业电子商务webapp(基于Java/Servlet)提供移动浏览器支持。当然有很多决定要做,但在我看来,基石是能够可靠地检测移动浏览器,并对要返回的内容做出相应的决定。是否有一种标准方法(快速)基于http请求进行此确定,并理想地收集关于发出请求的给定浏览器和设备的更多信息(屏幕大小、html功能等)

我还希望有人能够提供任何有用的补充信息,这些信息都是从开发方面获取现有大型企业webapp并设计出移动浏览器支持的

[编辑]我当然理解请求标题,关于标准用户代理数据库的信息是一个很大的帮助。对于那些谈论“其他”请求头属性的人来说,如果您可以包含类似的标准化名称/值资源,这将是一个很大的帮助


[编辑]一些用户提出了一些解决方案,包括通过电话呼叫某个将进行检测的web服务。虽然我确信这是可行的,但对于企业电子商务网站来说,这不是一个好的解决方案,原因有二:1)速度。对第三方的每一个页面请求进行一次在线调用都会对性能产生巨大影响。2) 依赖/法律。我们会将我们的网站响应时间和关键功能与他们的服务联系起来,这对于法律和风险来说是可怕的。

标准方法不是检查用户代理吗?以下是一个可用于检测移动浏览器的示例。

您必须使用先前定义的列表检查用户代理字符串,

(及其)看起来不错。

您将从请求头中获得大多数信息,如浏览器、设备、可接受的语言、可接受的格式等。上面提到的用户代理是请求头的一部分。

虽然可以通过移动浏览器的用户代理检测到移动浏览器,但PC平台上的浏览器大战表明,嗅探用户代理并不是一件好事

理想情况下,应该根据媒体类型应用特定的样式,或者根据用户代理以外的标题发送不同的答案,例如告诉浏览器更喜欢哪种内容的Accept标题


目前,通过浏览器嗅探为一个与iPhone和Opera协同工作的网站编写代码可能就足够了,但谷歌Android随时都会出现,而且在不久的将来,还有许多其他手机的浏览器功能将接近iPhone,开发一个不支持Android的手机网站将是一种浪费这些设备从零开始就尽可能好。

@David的回答提到使用WURFL——这可能是你最好的选择。然而,事先警告一下,成功率通常在60%左右(根据我和其他人的经验)。随着运营商不断更换UA,以及现有设备配置文件的数量(60000+?),没有防弹的方法来获取您想要的所有正确数据


在严重依赖设备DB之前,只需发出一点警告。如果我猜错了,我会允许用户更改会话选项,以保持用户选项的开放性。

您可以使用Web服务来检测手机浏览,如handsetdetection.com

我提出了一个基于uaprof和用户代理的免费检测系统:
当UAprof可用时,它应该是检测的主键,因为同一UAprof通常有多个用户代理。如果你想自己管理这个,那么你应该选择Wurfl,因为你可以下载整个数据库并自己在本地管理它。

事实上,仅仅依靠useragent还不足以检测移动浏览器

当然,几年前,你可以搜索某些字符串,猜测它是诺基亚或其他什么,但现在有这么多手机在那里,这么多假装的东西,他们不是,所以需要更复杂的东西

我发现一个很棒的网站,它基于MTV所有移动网站使用的相同解决方案。它非常好,因为它有一种独立于设备的标记语言,但更重要的是,它们为isMobileDevice()提供了一个webservice调用

只要看看手册,然后看看“它是如何工作的”


我一直在为我的客户网站使用它,但还没有找到一款它无法准确检测到的移动浏览器。完全瞎了

当我最近有类似的需求时,我发现使用
HTTP\u X\u WAP\u PROFILE
HTTP\u ACCEPT
HTTP\u USER\u AGENT
来识别浏览器是移动的还是非移动的。它是PHP,但可以相当容易地转换为您需要的任何内容(我用VBScript为经典ASP实现了它)


具有讽刺意味的是,我最终没有使用该代码,因为我们决定为移动和非移动用户提供特定的URL,但在我测试它时,它确实起了作用…

在搜索了几天检测移动设备的正确方法后,我决定保持它的简单[愚蠢]我将在我的索引页上放置一个“移动设备站点”按钮。。。。只需点击一下

您可以使用检测浏览器功能

刚刚遇到的这些内容:

  • 使用设备和功能检测改善移动web上的用户体验
  • 设备检测简介
  • 移动站点设计方法
  • 无所事事
  • 提供通用移动站点
  • 设计时考虑到移动和适应性
  • 内容自适应和设备分组策略
  • 设备分组
  • 内容改编
  • 把适应的需要降到最低
  • 通信
    <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://wurfl.sourceforge.net/wurfl_schema.php