mp.weixin.qq.com/s/ffGjlDEzE…
1. 为什么点击掘金链接能跳转到微信页面?
- 页面跳转(a标签或window.open) :
浏览器允许你从一个网站(如 juejin.cn)跳转到另一个网站(如 mp.weixin.qq.com),因为这只是页面级的导航,不涉及前端脚本直接读取或操作目标网站的数据。
- 安全边界:
跳转后,两个页面是完全隔离的,掘金页面无法用 JS 访问微信页面的内容。
- 同源策略只限制脚本跨域读取数据,不限制页面跳转。
2. 为什么 stplan 前端请求 qeelin 后端会报 CORS 错?
- 前端 AJAX/Fetch 请求:
当你的前端页面(stplan.waimai.st.sankuai.com)用 JS 请求后端接口(qeelin.waimai.st.sankuai.com),这就是浏览器定义的“跨源请求”。
- 同源策略限制:
浏览器会检查前端页面和请求目标的协议、域名、端口,只要有一个不同(本例是二级域名不同),就会拦截响应,前端页面拿不到数据。
- CORS(跨域资源共享)机制:
如果后端没有返回 Access-Control-Allow-Origin 等 CORS 响应头,浏览器会报错(CORS error),前端页面无法获取数据。
- 安全原因:
这是为了防止恶意网站随意请求并读取其他网站的敏感数据。
3. 总结对比
| 场景 | 是否跨域 | 浏览器行为 | 用户体验 |
|---|
| 页面跳转(a标签) | 跨域 | 允许跳转,页面隔离 | 正常跳转 |
| JS请求不同域名的接口 | 跨域 | 拦截响应,报CORS错误 | 页面无数据/报错 |
核心结论
- 页面跳转只改变浏览器地址,不读取目标网站数据,浏览器允许。
- 前端JS跨域请求涉及数据交互,浏览器默认禁止,除非后端明确允许(CORS头)。