Chrome的“请求桌面网站”选项如何工作?

对于iOS谷歌浏览器,当用户点击“请求桌面网站”button浏览器做什么来尝试启动一个桌面网站? 我想象网站正在寻找某种types的请求头,或类似的东西?

我认为唯一的区别是请求中的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 

注意第一个单词“Mobile”,还有Android系统和设备的提及,检查这些,我发现它也提供了错误的信息,即X11和x86_64,与Desktop Linux版本铬。

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

鉴于: somesite.com嗅探代理,看到Android,并做一个document.location + =“/ m”;

然后:浏览器将具有somesite.com/m的URL

但是:如果你“请求桌面站点”,它将改变用户代理,并从somesite.com重新请求

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

我期望,这与HTTP 301和302redirect,我知道它适用于document.location更改(至less如上所述),并会推测,它与<meta>刷新工作。

只是想指出,Chrome现在不仅会更改User-Agent而且还会在“请求桌面网站”时忽略原始视口元标记。 因此,不再需要嗅探User-Agent ,并且可以依赖视口更改,因为大多数响应站点将自动执行。 请参阅此更改以作进一步参考。

这个JavaScript代码将有效地做同样的事情:

 function requestDesktopSite() { document.getElementsByTagName('meta')['viewport'].content='min-width: 980px;'; } 
 <button onclick="requestDesktopSite()">Request Desktop Site</button>