- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们看到一些 Safari 浏览器在我们从 .NET 3.5 升级到 .NET 4.0 后无法交叉验证我们的网站。
经过大量调查,结果证明是 ASP.NET 无法正确识别 Safari 浏览器的问题。 ASP.NET 将某些 Safari(可能是其他基于 WebKit 的浏览器)标识为 Mozilla 0.0 版。不支持 cookie、框架、JavaScript 等的浏览器。.NET 3.5 识别这些浏览器没有任何问题。
我们将测试简化为一个简单的 HTTP 处理程序(在 vanilla 4.0 网站上运行),它只返回请求者的浏览器功能。
以下是一些无法识别的 User-Agents(它们被识别为 Mozilla 0.0):
Mozilla/5.0+(Macintosh;+U;+Intel+Mac+OS+X+10_5_8;+en-us)+AppleWebKit/533.19.4+(KHTML,+like+Gecko)+Version/5.0.3+Safari/533.19.4
Mozilla/5.0+(Macintosh;+U;+Intel+Mac+OS+X+10_6_2;+en-us)+AppleWebKit/531.9+(KHTML,+like+Gecko)
Mozilla/5.0+(Macintosh;+U;+Intel+Mac+OS+X+10_6_7;+en-us)+AppleWebKit/533.20.25+(KHTML,+like+Gecko)+Version/5.0.4+Safari/533.20.27
Mozilla/5.0+(Macintosh;+U;+Intel+Mac+OS+X+10_6_6;+en-us)+AppleWebKit/533.18.1+(KHTML,+like+Gecko)
<%@ WebHandler Language="C#" Class="PowershellTemporaryHandler" %>
using System;
using System.Web;
using System.Web.Security;
public class PowershellTemporaryHandler : IHttpHandler
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
HttpBrowserCapabilities hbc = context.Request.Browser;
context.Response.Write("Type=" + hbc.Type + "<br>");
context.Response.Write("Name=" + hbc.Browser + "<br>");
context.Response.Write("Version=" + hbc.Version + "<br>");
context.Response.Write("Major Version=" + hbc.MajorVersion + "<br>");
context.Response.Write("Minor Version=" + hbc.MinorVersion + "<br>");
context.Response.Write("Platform=" + hbc.Platform + "<br>");
context.Response.Write("Is Beta=" + hbc.Beta + "<br>");
context.Response.Write("Is Crawler=" + hbc.Crawler + "<br>");
context.Response.Write("Is AOL=" + hbc.AOL + "<br>");
context.Response.Write("Is Win16=" + hbc.Win16 + "<br>");
context.Response.Write("Is Win32=" + hbc.Win32 + "<br>");
context.Response.Write("Supports Tables=" + hbc.Tables + "<br>");
context.Response.Write("Supports cookies=" + hbc.Cookies + "<br>");
context.Response.Write("Supports VBScript=" + hbc.VBScript + "<br>");
context.Response.Write("Supports Frames=" + hbc.Frames + "<br>");
context.Response.Write("Supports JavaScript=" + hbc.EcmaScriptVersion.ToString() + "<br>");
context.Response.Write("Supports Java Applets=" + hbc.JavaApplets + "<br>");
context.Response.Write("Supports ActiveX Controls=" + hbc.ActiveXControls + "<br>");
context.Response.Write("User Agent=" + context.Request.UserAgent + "<br>");
}
}
最佳答案
我一直在遇到似乎是类似的问题。似乎认为某些 Safari 用户代理没有被正确识别,而是报告为 Mozilla 0.0,但一些调查表明这种失败并不完全可重现。如果我使用 Firefox 的 UserAgent-Switcher 发送之前无法识别的完全相同的用户代理并查看浏览器功能,它会被正确报告为 Safari。浏览服务器日志文件(在添加一些调试信息之后)似乎也证实了这种行为。具有相同 (Safari) 用户代理的完全相同的客户端有时会被正确识别,有时会被报告为 Mozilla 0.0 - 大多数情况下,它会连续几次被错误识别,然后才能再次正确识别......它只是似乎影响 Safari 用户代理 - 如果有人感兴趣,我有一个相当长的列表,最近的一个是:
<browserCaps userAgentCacheKeyLength="..." />
关于.net-4.0 - .Net 4.0 网站无法识别某些基于 AppleWebKit 的浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5478181/
用户代理可以检测到 AppleWebKit .这是一个主要用于 Apple 设备的浏览器引擎,但也用于 BlackBerry 浏览器、PlayStation 控制台和 Tizen 移动操作系统。此外,
我们看到一些 Safari 浏览器在我们从 .NET 3.5 升级到 .NET 4.0 后无法交叉验证我们的网站。 经过大量调查,结果证明是 ASP.NET 无法正确识别 Safari 浏览器的问题。
我正在开发的 iPhone 应用程序使用 WKWebView,但是(我的客户要求……)它必须有一个自定义用户代理。 我们希望用户代理字符串模仿 Safari 的,看起来像这样: Mozilla/5.0
我是一名优秀的程序员,十分优秀!