问题
浏览器上网时,图片经常显示不出来(以某浪微博和某好友圈为甚),浏览器的页面加载错误,经常需要F5刷新(甚至连刷新也无法解决)
原理
大背景
有些ISP在公网级别不支持 IPv6,但是目前操作系统到家用路由器都早已经支持 IPv6。于是就会出现,终端误以为“能上IPv6网”,但实际连不了IPv6的尴尬局面……
具体场景
终端在上网时,会先查询 DNS 得到v6和v4并存的结果;这时候终端会判断最邻近的链路层是否支持 IPv6,局域网的一般从路由器到终端器已经形成一个IPv6的封闭线段(leg),这就使终端和浏览器误以为“我有畅通的v6链接”,这样就会优先使用 IPv6那个地址访问静态资源(图片),但不幸的是,公网不支持 IPv6,或者支持不完善……这样的结果就是,图片显示不出来,并且由于.js等资源的访问阻塞导致页面加载时间慢……
解决方案
药方很简单,即在链路层禁用 IPv6,断掉终端的错误念头 把 路由器上的 IPv6 禁掉,或 Macbook / Win 10 上的 IPv6 禁掉即可。 顿时感觉网速快了好多,浏览器也不卡顿了,图片也不显示成“叉”了……