移动端访问跳转失效

2021-03-04 15:31:11 浏览数 (1)

背景:

大家都知道,电脑、平板、手机的屏幕是差距很大的,比如在电脑上写好了一个页面,在电脑上显示很正常,但是若通过手机访问,那可能就会乱的一塌糊涂,这个时候怎么解决呢?有一种常见的办法是专门为手机定制一个页面,当用户访问的时候,判断设备是手机还是电脑,如果是手机则跳转到相应的手机页面,例如百度的就是,手机访问www.baidu.com就会跳转到m.baidu.com。

问题描述:

客户反馈移动端访问http://3qys.com.cn/xxx时,没有按照预期跳转至http://m.3qys.com.cn/xxx。

原因分析:

1、确认问题时间点附近,CDN侧是否有配置变更;

2、确认移动端访问跳转的功能是由客户源站实现,还是CDN侧实现;

经确认,该跳转功能是由源站实现,且源站和CDN侧均无配置变更。

模拟移动ua测试,未复现现象。分析日志,发现问题时间点前有pc端访问http://3qys.com.cn/的记录,且该url匹配到缓存策略,被节点缓存住了。此时,原因定位到!!!

默认情况下,CDN侧并不会区分ua缓存,也就是pc端访问某文件缓存住后,移动端再请求至有该文件缓存的节点时,会直接命中,不会再回源。

ps:若源站有响应头Vary: User-Agent,有些CDN厂商会根据不同的ua区分缓存。腾讯云会忽略vary头,即不会根据vary头部值的不同而区分缓存。

测试方法:

1、curl -A 模拟测试

curl -voa 'http://3qys.com.cn/eg_tulip.jpg' -A 'iphone'

2、下载谷歌插件,通过谷歌浏览器模拟移动ua测试

https://chrome.google.com/webstore/detail/user-agent-switcher-for-c/djflhoibgkdhkhhcedjiklpkjnoahfmg/related

安装完成后,浏览器右上角会出现如下图标,点击"User-Agent Switcher for Chrome",选择需要测试的移动端设备类型即可。

解决方案:

1、跳转功能由源站实现,但需要跳转的url,CDN侧需配置不缓存,但这种方式会对源站造成压力。

2、由CDN侧实现访问跳转功能,即用户访问至边缘时,节点根据请求的ua来决定是否跳转,跳转到哪个地址。---推荐使用

配置该功能时,需要和客户确认移动端ua列表(是否区分大小写),需要设置跳转的url,以及希望跳转到哪个url。

示例:

ua:android|iphone|UCWEB|ipod|windows phone,不区分大小写

跳转url:除 3qys.com.cn/topics/、3qys.com.cn/zhuanti/ 这2个url,其它url均需要设置跳转

跳转后的url:http://m.3qys.com.cn/xxx

0 人点赞