浏览器内核,user-agent

2023-10-31

最近web界被红芯事件吵得沸沸扬扬,也激起了我对浏览器内核进一步的学习热情。

先来看看user-agent,它是我们前端开发获取用户操作系统,浏览器版本等数据的常用方法:

UA存在于每次http请求的请求头中,像这样

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36

根据MDN上的描述,上面的字段有着多种多种声明信息,大致分以下几块

1. Mozilla/5.0  

这是浏览器通用标识,几乎所有浏览器都会带,至于为什么,这里有一篇有趣的文章 —— 为什么浏览器User-agent总是有Mozilla字样——User-agent String里的历史故事。大致上是说早年Mozilla浏览器支持一些好的技术,所以网页开发者会对它和其它浏览器区别对待,这引发了其它浏览器厂商的不满,又没法普及自己浏览器的支持性,就冒充Mozilla以获得更好的浏览体验。

2. (Windows NT 10.0; WOW64)

括号里是操作平台,包含了浏览器运行所在平台的操作系统,比如win10 64位,这里还可以包含手机操作系统;如

(iPhone; CPU iPhone OS 11_0 like Mac OS X) 这是iphone6的操作平台操作系统位OS11

3. AppleWebKit/537.36 (KHTML, like Gecko)

第三部分就是我们最常说的内核(渲染引擎/排版引擎,Rendering Engine),也就是HTML的排版引擎,对浏览器来说有着举足轻重的作用,目前市场上的内核主要有

  • Trident —— 它是IE浏览器的标志之一,国内的双核浏览器的兼容模式用的就是Trident。
  • Gecko —— 由NetScape公司研发,目前由Mozilla基金会开发维护的开源项目,曾经红极一时的Firefox就是使用的它
  • Webkit —— 由苹果公司研发,是目前最强大,最普及也最时尚的浏览器内核,市场占有率很高,像safari / edge / Chrome 等都用的appleWebkit。
  • Blink —— 由谷歌推出,与opera合作开发的新浏览器内核(2013年),现今两者都用的blink。这也是为了摆脱对webkit的依赖和保护浏览器生态(webkit2与chrome沙箱设计模式发生冲突造成的)。

有趣的是,chrome和opera虽然用的blink内核,但在user-agent上却没有体现(仍然写的appleWebkit)。这也是为了兼容性,web开发者都习惯了将webkit作为兼容性最好的内核, 为了更好地浏览器体验,就沿用了webkit字段。

4. Chrome/67.0.3396.99 Safari/537.36

这是浏览器的版本,表示至少支持以上两个浏览器版本。

总结:这个user-agent里并非所有字段都真实,各浏览器厂商为了更好地兼容,各种伪装,是的UA显得很混乱,所以字段内容要适当采选,避免bug。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浏览器内核,user-agent 的相关文章

  • httpclient请求403

    问题 httpclient请求对方服务器报403 用postman是可以的 原因 HttpPost request new HttpPost uri request setHeader User Agent Mozilla 5 0 Wind
  • 为什么服务器重置 TCP 后用户代理会重新提交请求?

    我们最近注意到一个问题 即某些用户代理会重复相同的 POST 请求 而用户实际上并没有实际触发它两次 经过进一步研究 我们注意到只有当请求通过负载均衡器并且服务器花了很长时间来处理请求时才会发生这种情况 数据包捕获会话最终显示负载均衡器在
  • 是否可以检测 Android 强制门户浏览器?

    我有一个强制门户 从 Android 5 0 Lollipop 开始 它在 Android 的强制门户浏览器而不是设备的默认浏览器中启动 我需要以某种方式检测它们是否在强制门户浏览器中 而不是常规网络浏览器 如果是 则显示不同的内容 是否可
  • 路径中存在非法字符,具体取决于用户代理?

    我对 ASP NET 有两次相同的调用 唯一的区别是用户代理 我使用 Fiddler 重现了这个问题 HTTP 请求行是 PUT http localhost API es us havana club tickets JiWOUUMxuk
  • 如何识别 Facebook 用户代理

    在 FB 上分享我的页面之一时 我想显示一些不同的内容 问题是 我不想使用 og 元素 而是识别 FB 用户代理 它是什么 我找不到它 有关用户代理字符串的列表 请查找here 截至 2015 年 9 月 最常用的是facebookexte
  • WebBrowser 控件报告什么 UserAgent?

    只是想知道 VB NET 在访问网页时读取的浏览器类型是什么 例如 在我的网站上 它显示了访问我的网站的所有不同浏览器的详细信息 您没有为您的问题提供太多背景信息 但我认为您正在谈论用户代理字符串当您使用时发送的WebBrowser con
  • 用户代理,从字符串中提取操作系统和浏览器

    我想从用户代理字符串中提取完整的操作系统名称和浏览器 我怎样才能做到这一点 我认为获取完整的操作系统名称和完整的浏览器名称很棘手 因为许多浏览器以不同的方式标识自己 您可能需要一些奇特的正则表达式 但它甚至可能无法 100 地工作 这是我用
  • 我应该使用自定义标头还是 useragent 标头将设备信息发送到服务器

    每次我向服务器发送 API 请求时 我都想发送设备类型和操作系统版本等信息 来自我的移动应用程序 我的第一个想法是使用用户代理 但我想知道使用自定义 http 标头 例如 X deviceType 或 和 X osVersion 是否有任何
  • Pandas 将用户代理列解析为多列

    我有一个 http 请求日志的数据框 唯一相关的列是我正在尝试解析的 userAgent 列 我正在使用 ua parser 这会将每个 userAgent 变成一个嵌套字典 如下所示 gt gt gt from ua parser imp
  • DOMDocument::loadHTMLFile() 修改用户代理

    我使用 PHP 在 DOM 树中加载网站 有没有办法修改使用发送的用户代理DOMDocument loadHTMLFile function parseThis url html new DOMDocument html gt loadHt
  • 判断操作系统是否为Mac

    我最近做了很多谷歌搜索 试图找到一个简单 容易的 php 脚本来识别用户是否在 Mac 上 我想用它来告诉用户我告诉他们的键盘快捷键是 控制 还是 命令 我不需要了解浏览器什么的 只要电脑是Mac就可以了 这是我所要求的可能的概述 if o
  • 使用 JavaScript 获取用户代理

    我想要一个可以获取用户的用户代理并将其支持到属性的脚本 我正在制作网站问题联系表 我通常需要知道用户使用的浏览器 如何检测用户代理字符串并将其支持为输入元素的值 我的 html 看起来像这样
  • 如何使用 Python 解析用户代理字符串

  • 设置/更改更改 Android 中的 WebView 用户代理

    我有一个网站 应该只在我的应用程序中使用 WebView 否则我的网站会将用户重定向到可以下载我的应用程序的页面 那么 如何在WebView中更改这个UA呢 另外 由此可能出现哪些问题 您可以使用setUserAgent https dev
  • “硬编码”用户代理足以让程序在多台计算机上运行吗?

    我在用着idHttp登录到一些网站并下载一些文件 我想知道因为我的程序将在具有不同窗口和软件的多台计算机上运行 例如当我说 idHttp userAgent Mozilla 5 0 Windows NT 6 1 WOW64 AppleWeb
  • 用户代理字符串可以有多大?

    如果您要将用户代理存储在数据库中 您会容纳多大的数据库 我找到了这个技术网文章 http technet microsoft com en us library bb496341 aspx建议将 UA 保持在 200 以下 HTTP 规范中
  • 安卓用户代理

    我正在 Android 中编写一个应用程序 它使用 WebView 来显示 HTML 内容 我被告知要为我的应用程序获取 Android 用户代理 我该怎么做 我打开了http whatsmyuseragent com http whats
  • 请求网站时,Javascript 用户代理 (ajax) 与发送的用户代理不同

    我注意到我的手机 OnePlus 3 Android 8 0 0 上的 Chrome 64 0 3282 137 在请求网页时发送的用户代理与通过 ajax 发送的请求略有不同 该用户代理在请求网页时发送 Mozilla 5 0 Linux
  • Chrome 的用户代理切换器

    我正在寻找适用于 Chrome 的用户代理切换器 正在搜索Chrome 网上应用店 https chrome google com webstore没有拿出一个简单的切换器 我知道我可以通过命令行和参数运行浏览器 Google Chrome
  • UIWebView 是否在请求标头中发送与移动 Safari 相同的用户代理?

    抱歉 我只想自己测试一下 但我目前没有 Mac UIWebView 内部发出的 Web 请求是否发送与移动 Safari 发出的 Web 请求相同的用户代理信息 从 UIWebView 发出的 Web 请求不会在用户代理字符串中包含单词 S

随机推荐

  • HTML5实现音频和视频嵌入

    简介 HTML5未出来之前 在线的音频和视频都是借助Flash或者第三方工具实现的 现在HTML5也支持了这方面的功能 在一个支持HTML5的浏览器中 不需要安装任何插件就能播放音频和视频 原生的支持音频和视频 为HTML5注入了巨大的发展
  • [脑科学]-这才是心理学

    这本书出了第9版了 不长 写的挺好 国内也有一本 同样的名字 隋xx写的 文笔也很好 可惜不太有名 1 心理学 就是研究大脑是如何工作的学科 嗯 一定要明白这一点 各种心理学实验就是黑盒测试大脑 脑外科就是白盒研究大脑 要想变得聪明之类的
  • 欢聚集团 -- 前端一面

    面试形式 牛客网面试 一面40多分钟 自我介绍 面试内容 手写事件委托 手写AJAX IE怎么处理 常见的http状态码 和 的区别 js隐式转换 闭包 闭包的结构 原型 原型链 对象的深浅拷贝 深拷贝的实现 怎么获取js对象的自身属性 j
  • Android多个fragment懒加载的坑(卡顿)

    在Android开发中 有很多种情况都是viewpage fragment左右滑动进行布局的 例如下面的今日头条 在今日头条app上 我们可以看到 其顶部都是一栏的类型数据源 可滑动 可联动下面的viewpage里的fragment 但是很
  • django配置DJANGO_SETTINGS_MODULE

    DJANGO SETTINGS MODULE 使用Django时要通知Django当前使用的是哪个配置文件 可以改变环境变量 DJANGO SETTINGS MODULE 实现这一点 当我们使用manage py运行起本地的web服务器时
  • 常见的代码优化技术

    常见的代码优化技术有 复写传播 删除死代码 强度削弱 归纳变量删除 如果有同学有研究过这部分内容 并总结过 有更好的答案 请联系我删除本篇非原创解答 1 复写传播 a d e b d e c d e gt t d e a t b t c t
  • 专治疑难系列 - 解决win11中xbox开机自启问题

    博客主页 Passerby Wang的博客 CSDN博客 系统运维 云计算 Linux基础领域博主 所属专栏 专治疑难系列 上期文章 专治疑难系列 无法激活网络的解决方法 如觉得博主文章写的不错或对你有所帮助的话 还望大家多多支持呀 关注
  • RabbitMQ与KafKa区别

    在应用场景方面 RabbitMQ 遵循AMQP协议 由内在高并发的erlanng语言开发 用在实时的对可靠性要求比较高的消息传递上 kafka是Linkedin于2010年12月份开源的消息发布订阅系统 它主要用于处理活跃的流式数据 大数据
  • 中国知网html如何复制,中国知网如何快速导出参考文献的格式? 来看看吧

    写论文时 需要很多引文及注释 就需要把参考文献标注上 按照参考文献的引文格式一点一点整理很麻烦 涉及大量文献时费时费力 中国知网有快速导出参考文献格式的功能 可单个导出 也可以大量导出 方便实用 工具 材料 中国知网 论文 操作方法 01
  • idea彻底改java项目名(详细说明各个地方改名的作用)

    需求分析 要将手头的java项目文件夹改名 经常会出现以下问题 无法运行 只是改了别名 打war包 jar包的包名还是不变 解决方案 以下将项目名Easyfile改为驼峰命名的EasyFile 改项目名称 此时只改了别名 改文件夹名 解决编
  • Yolov3中Anchor box和confidence的理解(公式未编辑 待续....)

    Anchor box bounding box prior Anchor box原理解释 1 Anchor box其实就是从训练集的所有ground truth 中通过统计聚类的方法 k mean 得到常用的尺寸大小 比如 在某个训练集中最
  • MySQL有哪些锁

    这次 来说说 MySQL 的锁 主要是 Q A 的形式 看起来会比较轻松 在 MySQL 里 根据加锁的范围 可以分为全局锁 表级锁和行锁三类 全局锁 全局锁是怎么用的 要使用全局锁 则要执行这条命 flush tables with re
  • flutter 自定义组件-抽奖大转盘

    import dart async import dart math import dart ui as ui import dart ui import package demo widget luck luck entity dart
  • TypeScript 变量声明 —— 类型断言(Type Assertion)

    类型断言 Type Assertion TypeScript 允许你覆盖它的推断 并且能以任何你想要的方式分析它 这种机制被称为类型断言 类型断言使用 as 关键字或者
  • 查出反向木马的反向连接域名

    来源 ttian net 反向木马的主要种植手段是通过IE的众多漏洞 bt下载时不小心运行 或者来路不明的软件 使未打补丁的用户点击之后下载运行了木马程序 而这些用户基本都是拥有动态IP的个人用户 若不使用反向连接的方式 势必无法长久控制
  • k8s中创建pv和pvc

    1 创建一个pv apiVersion v1 kind PersistentVolume metadata name pv0003 名称 spec capacity storage 5Gi 卷大小 volumeMode Filesystem
  • Unity中自动识别串口以及热拔插

    最近需要在Unity中实现自动识别热拔插并识别串口的功能 实在没有找到原生的消息响应 折腾了一周 尝试了多种方法 总结一下主要有3种实现思路 1 利用Form类中的消息进行串口拔插消息的接收 2 实时保存串口信息到外部文件 进行判别 3 读
  • Vscode中安装 n 命令来切换 node 版本以适应不同项目不同的node版本号

    一 问题描述 Centos中第一次安装的node 因为下载的源码是最新的 是最新的版本18 14 0的 但发现项目启动的时候提示 二 解决办法 这时候会有两个选择 卸载node然后重新安装符合项目的版本 比较麻烦 有时候可能node还卸载不
  • 踩坑道路之——ubuntu下pt query digest无法分析慢查询日志

    刚才在使用pt query digest分析慢查询日志的时候 当我优雅的敲出 sudo pt query digest var lib mysql yang K45VD slow log 此时终端并没有像我所希望的那样 现实慢查询的分析结果
  • 浏览器内核,user-agent

    最近web界被红芯事件吵得沸沸扬扬 也激起了我对浏览器内核进一步的学习热情 先来看看user agent 它是我们前端开发获取用户操作系统 浏览器版本等数据的常用方法 UA存在于每次http请求的请求头中 像这样 Mozilla 5 0 W