Actualmente estoy buscando en las capacidades del navegador y estoy tratando de probar los archivos de definición del navegador que vienen con .NET 4.0. Para ello estoy usando un add-on para Firefox para cambiar el agente de usuario y tengo una página sencilla que da cuenta de lo siguiente:¿Por qué obtengo estos resultados extraños al mirar las capacidades del navegador?
Request.UserAgent
Request.Browser.Id
Request.Browser.Browser
Request.Browser.MajorVersion
Request.Browser.MinorVersion
Request.Browser.Platform
Request.Browser.IsMobileDevice
Request.Browser.MobileDeviceManufacturer
Request.Browser.MobileDeviceModel
Generalmente esto da la información correcta sobre la base de los ejemplos proporcionados en los comentarios en los archivos predeterminados de definición del navegador. Sin embargo, estoy viendo resultados extraños de vez en cuando que no puedo explicar.
Tomemos el ejemplo de agente de usuario iPhone en el archivo iphone.browser
definición que es la siguiente:
Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3
Esto debería devolver el navegador como Safari, que lo hace. Esto se debe a la puerta de enlace del iPhone que tiene Safari como padre, que coincide con el término Safari
.
Alterar el agente de usuario ligeramente por lo que emula el agente de usuario del cliente de correo en un iPhone significa la eliminación de la parte final del agente de usuario de la siguiente manera:
Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko)
Esto ahora debe volver Mozilla como el navegador, ya que no podrá coincidir con el término Safari
. Sin embargo, al analizar esto inmediatamente después del primer informe se devuelve información incorrecta, y todavía se indica que el navegador es Safari.
Adición de un archivo personalizado .browser
con la carpeta App_Browsers
y modificando después de que parece que obligarlo a ser correcta temporalmente, casi como las definiciones o reglas están siendo almacenado en caché y no correr por completo en cada solicitud.
Esto también funciona a la inversa, si comienza con el segundo agente de usuario de ejemplo, al analizar el primero, se informará que es Mozilla en lugar de Safari.
¿Alguien puede explicar este comportamiento o una forma de evitarlo? ¿Está tratando de hacer algún tipo de almacenamiento en caché (no tan inteligente) donde hace suposiciones basadas en agentes de usuario similares?
Gracias.
Si lo que dice es correcto, los resultados serían consistentes sin importar qué agente de usuario se analiza primero, pero este no es el caso como se describe en mi ejemplo. Puede ver las reglas por sí mismo, se almacenan con la carpeta de Framework correspondiente dentro de Windows en 'Config/Browsers'. En cuanto a su comentario "Hay más en el partido que solo buscar la cadena 'Safari'". esto es exactamente lo que coincide, como se puede ver en el archivo 'safari.browser' donde verá que hereda de Mozilla y simplemente lo extiende usando' ' –
rrrr
Acabo de notar la edición de este como alguien votó la pregunta, volveré a visitarla en algún momento cuando tenga tiempo e investigaré más. – rrrr