Chrome的"请求桌面版网站"选项如何运作?

but*_*lmj 81 mobile google-chrome

对于iOS谷歌浏览器,当用户点击"请求桌面网站"按钮时,浏览器会尝试打开桌面网站做什么?我想象网站正在寻找的某种类型的标题,或类似的东西?

dsh*_*dsh 58

我认为唯一的区别是User-Agent:请求中的标头.

以下是Chrome在我的Android设备上发送的用户代理标头:

Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.45 Safari/535.19
Run Code Online (Sandbox Code Playgroud)

请注意第一个中的"Mobile"一词,以及Android系统和设备的提及.检查这些,我看到它还提供了错误信息 - 即X11和x86_64 - 以紧密匹配桌面Linux版本发送的值铬.

  • 一个单独的标题将是辉煌的.用户代理嗅探是如此可怕. (13认同)
  • 我同意.有时,某些网站实施的自动检测和重定向非常适得其反,并且会加剧. (9认同)
  • 更好的解决方案是检测设备大小,接口和功能.CSS媒体查询是朝着正确方向迈出的一步. (3认同)
  • 该功能并不是通过简单的UA切换和刷新来实现的。事实是,如果加载了桌面 UA 字符串,大多数移动网站将不会切换回桌面。那么 Safari 会使用您最初的请求吗?没有。即使您最初输入了移动网站的 URL,它似乎也能工作。我不知道它是如何实现的,因为移动版本的名称绝不是标准化的,但有比简单的 UA 更改更聪明的事情正在发生。 (2认同)

小智 16

只是想指出Chrome现在不仅会更改,User-Agent而且如果您"请求桌面网站",也会忽略原始视口元标记.因此,没有必要再嗅探User-Agent,您可以依赖视口更改,因为大多数响应式网站会自动执行.请参阅此更改以供进一步参考.


小智 14

另一个细微的差别是,在任何重新导演移动之前,请求似乎是最后一次有意输入的URL.例如:

鉴于: somesite.com嗅探代理,看到Android,并执行document.location + ="/ m";

然后:浏览器的URL为somesite.com/m

但是:如果您"请求桌面网站",它将更改用户代理并从somesite.com重新请求

除非:您首先直接访问somesite.com/m的移动网址,在这种情况下,它只会重新加载somesite.com/m.

我希望这适用于HTTP 301和302重定向,我知道它适用于document.location更改(至少如所描述的),并推测它适用于<meta>刷新.