base href 仅影响 HTML 中纯相对路径属性(如 src、href)的解析基准,对 fetch、import、Worker 等运行时跨域请求完全无效,也不绕过同源策略或 CORS 限制。

base href 对跨域请求完全不生效
<base href> 只在 HTML 解析阶段重写纯相对路径(如 src="app.js")的解析基准,它不改变协议、不绕过同源策略、也不影响任何运行时发起的跨域请求。无论你写 <base href="https://cdn.example.com/"> 还是 <base href="/subpath/">,fetch('./api/data')、import('./utils.js')、new Worker('./worker.js') 全部按模块自身位置或当前页面 origin 解析,和 <base> 无关。
为什么 img/script 跨域能加载,但 fetch 会报 CORS 错误
这不是 <base> 的作用范围问题,而是浏览器机制差异:
-
<img src="https://cdn.example.com/logo.png">是“只读通道”,只要服务器返回图片,浏览器就渲染,不校验响应头 -
fetch('https://api.example.com/user')尝试读取响应体内容,触发完整 CORS 流程:必须有Access-Control-Allow-Origin响应头,且不能是*(若带 credentials) -
<base href="https://cdn.example.com/">只会让<img src="logo.png">变成请求https://cdn.example.com/logo.png,但它不赋予该请求额外权限
base href 写错反而加剧跨域混乱
常见错误写法会静默失效,导致你以为资源走 CDN,实际仍从当前域名加载,结果暴露内部路径或触发意料外的跨域拦截:
-
<base href="cdn/">→ 被浏览器丢弃,<script src="app.js">请求的是https://your-site.com/app.js,而非 CDN -
<base href="https://cdn.example.com">(结尾缺/)→ Firefox 截断拼接,style.css变成请求https://cdn.example.comstyle.css,404 -
<base href="../static/">→ 含..,非法,整条标签被忽略,所有相对路径回退到页面 URL 解析
此时 Network 面板里看到的请求地址才是真实依据,别信 HTML 源码里写的 src 值。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
立即学习“前端免费学习笔记(深入)”;
真正需要跨域控制的地方,base 标签插不上手
跨域行为由三类机制分别管控,<base> 只沾边第一类,且仅限静态属性:
- ✅ HTML 属性中的纯相对路径(
src、href、action)→<base>可改写解析起点 - ❌ JS 运行时路径(
fetch()、import()、XMLHttpRequest)→ 完全不受控,需服务端配 CORS 或前端代理 - ❌ CSS 中的
@import和url()(除非写在 HTML style 标签内并被解析为属性值)→ 不走 base,靠 CSS 引擎自己 resolve
最容易被忽略的是:即使你把 <base href="https://cdn.example.com/v2/"> 写得完全正确,fetch('/api/user') 仍发向当前页面域名,不会自动带上 CDN 前缀——它压根不看 <base>。


















