双核浏览器切换内核(模式)的行为分析

双核浏览器切换内核(模式)的行为分析

测试的浏览器

360安全浏览器、qq浏览器、搜狗浏览器

约定

  1. 在没有特别指出某条性质属于具体哪一个浏览器时,表示对于所有测试的浏览器均适用。
  2. 极速模式指以Webkit为内核的模式,兼容模式指以IE为内核的模式。

结论

切换内核时浏览器会自动复制所有的cookie,并且不受secure, httpOnly, path等属性影响,也就是说上述三个属性不论取何值,都会在两种模式(两种内核)中复制。

关于360安全浏览器中的__guidmonitor_count

在使用360安全浏览器时,不论是在兼容模式还是极速模式,浏览器会自动为你访问的每一个网站增加两个cookie: __guidmonitor_count

据观察,它们的行为规律如下:

  • __guid : 是一个类似于唯一主键的长字符串,在每次用户第一次访问某个域名时,浏览器会生成一个新的 ‘__guid’ ,在用户切换内核时,这个值会被自动复制,保持不变。
  • monitor_count : 是一个从1开始的自增数字,在极速模式下,每发一次请求,会自增1,每次切换内核(双向均可),也会自增1,但在兼容模式下,每发一次请求不会自增。

上述两个cookie猜测应该是360安全浏览器自身的某种机制,开发者不必太关心它们,修改、删除它们均不会影响cookie在内核之间的复制,开发者只需注意自己的cookie的key在取名的时候要避开它们就可以了。

对 Head 的影响

最重要的是对 User-Agent 的影响,三个浏览器均会在切换内核后改变 User-Agent ,因此如果你的后台程序依赖 User-Agent ,那么请注意这个特性。

其他 Head 也会有很大影响(但不会影响前端自己设定的 Head ),但通常对于后台开发者来说并不重要,因此不过多分析。

对 Storage 的影响

Session Storage

  1. 不论是从极速模式切换到兼容模式,还是反过来,Session Storage 都不会复制到另一个模式,也就是说两个模式之间不共享 Session Storage 中的数据。

  2. 对于360安全浏览器、qq浏览器,极速模式下,切换到兼容模式并再次切换回极速模式后,之前放入 Session Storage 中的对象依然存在,也就是说,切换内核并不会导致这些对象的丢失;而对于搜狗浏览器,并不存在这条特性,也就是说极速模式切换到兼容模式,会丢失之前保存的对象

  3. 兼容模式不会保存 Session Storage 中的对象,在切换内核时,之前保存到 Session Storage 中的对象会立刻丢失,再次切换回兼容模式也已经找不到了。

Local Storage

  1. 不论是从极速模式切换到兼容模式,还是反过来,Local Storage 都不会复制到另一个模式,也就是说两个模式之间不共享 Local Storage 中的数据。

  2. 兼容模式下,不同的浏览器之间会有限程度地共享 Local Storage 中的信息,表现为:在某个浏览器的兼容模式下放入(或修改、删除)的对象,在其他浏览器的兼容模式下(也包括IE浏览器本身),并不会立刻体现出来,但如果你重新打开这些浏览器,就会看到刚才的新增、修改、删除; 例如在360安全浏览器的兼容模式下,往 Local Storage 中新增一个对象,那么你重新打开IE浏览器之后,会发现在 IE 浏览器的 Local Storage 中也存在刚刚新增的对象。

  3. qq浏览器的极速模式下,会往 Local Storage 自动存入三个key:white, date, black,因此你在存入对象时一定要注意避开这三个key。

建议

  1. 不要在 Storage 中存放敏感信息和重要信息,仅建议存放一下无关紧要的数据。
  2. Cookies 机制可以放心使用,不需要担心切换内核造成状态遗失。
  3. 对于浏览器自身发送的 Head ,如 User-Agent ,在切换内核时会改变,后台开发者不要将此类 Head 作为用户身份的校验依据。例如在 Apereo Cas 4.1.x 系列,后台会将 User-Agent 与登录令牌绑定起来,如果 User-Agent 改变,后台会认为这是一个新用户。

用于测试的demo

用于测试Storage的demo
https://github.com/rocketk/testmultikernel-storage

用于测试Cookies的demo
https://github.com/rocketk/testmultikernel-cookies

你可能感兴趣的:(web)