点开360搜索,搜索页面加载出来了,网页搜索框能输入,全部按钮能点,脚本但所有依赖JavaScript的运行功能全挂了。这不是搜索个例。上周三下午,网页我连续测试了五个不同网络环境下的全部360搜索主页,结果一致:控制台里一堆红色报错,脚本脚本被拒绝执行。运行最直接的搜索表现是搜索建议不弹出,按回车没反应,网页甚至连"搜索"按钮的全部悬停变色效果都失效了。
问题出在CSP策略上。脚本360搜索的运行响应头里写死了
script-src 'self',但页面实际加载的脚本却来自多个第三方域名。浏览器一看,这些脚本不在白名单里,直接拦掉。打开开发者工具,Network面板里那些被标红的.js文件,状态码全是(blocked:csp)。更离谱的是,连360自己的统计脚本都被拦了——它挂在s.360.cn下,而页面声明的'self'只认www.so.com这个域。我试着在Chrome里临时禁用CSP,页面瞬间活了。搜索建议出来了,回车也能跳转了。但普通用户不可能这么干。有人可能会说"换个浏览器试试",我换了Edge、Firefox,结果一样。Firefox的控制台甚至更直白:
Content Security Policy: 页面设置阻止了内联脚本的执行。那些写在HTML里的onclick事件,全被当成内联脚本毙掉了。这事的诡异之处在于:360搜索不是新站,CSP策略也不是刚加的。那为什么之前没大面积爆发?我翻了下最近的更新记录,发现他们在两周前调整了静态资源域名,把一部分JS从
www.so.com迁到了so.360.cn。但CSP头没跟着改。运维和前端大概没对齐。这种低级错误放在小公司算事故,放在360这个体量的产品上,只能说流程有洞。更让人头疼的是错误提示的误导性。浏览器控制台只报"脚本加载失败",不告诉你是因为CSP。普通用户看到搜索没反应,第一反应是网络卡了,或者自己键盘坏了。我旁边工位的同事就遇到过——他以为回车键失灵,重启了两次电脑。后来我让他按F12,他才看到满屏的CSP报错。这种信息差把简单问题变成了玄学故障。
从技术角度讲,修复不难。要么把CSP的
script-src改成'self' so.360.cn s.360.cn,要么把脚本全迁回主域。但拖了这么久没修,说明监控没覆盖到真实用户端。他们可能只在内部环境测,而内部环境的CSP策略跟线上不一样。或者更糟——有人发现了但觉得"不影响核心功能"。可搜索建议和回车提交就是核心功能啊。我写了个简单的油猴脚本,在页面加载时动态重写CSP头,把缺失的域名加进去。测试通过,搜索恢复正常。但这只是个人补丁。普通用户不会装油猴,也不会改浏览器设置。他们只会觉得"360搜索越来越难用了",然后换百度或必应。一个CSP配置失误,流失的是真实流量。
如果你现在打开360搜索发现脚本不跑,别急着重装浏览器。按F12,看Console里有没有
顶: 99踩: 345Refused to execute inline script或者blocked:csp。有的话,就是这个问题。临时方案是换个没启用严格CSP的浏览器,或者用隐私模式碰运气——有些隐私模式会放宽限制。长期方案?等360自己修。但按他们目前的响应速度,我建议你先收藏百度。






评论专区