base href 必须是绝对 url 或根相对路径(如 href="/myapp/"),否则静默失效;仅影响 html 中纯相对路径的资源引用(如 img、script、link 等),对 fetch、import、css @import 等运行时行为完全无效。

base href 必须是绝对 URL 或根相对路径,否则静默失效
浏览器遇到 <base href="assets/"> 这类写法,会直接跳过整个标签——不报错、不警告,但后续所有 <img src="logo.png"> 都按当前页面 URL 解析,404 风险极高。真正有效的只有两种形式:href="https://cdn.example.com/v3/"(推荐用于 CDN 场景),或 href="/myapp/"(根相对路径,结尾必须带 /,否则 Firefox 会截断)。
常见翻车点:href="../static/"、href="css/"、href="%PUBLIC_PATH%/"(未被构建工具替换时就是字面量字符串)全部无效。本地开发建议用 href="http://localhost:3000/" 而非 href="/",避免和后端路由冲突。
哪些资源受 base 影响,哪些完全不受
<base> 只在 HTML 解析阶段起作用,改写的是纯相对路径(即不以 /、: 或协议开头)的初始解析逻辑。它不是全局代理,更不介入 JS/CSS 运行时行为。
✅ 真正受影响的:<img src="icon.png">、<script src="app.js"></script>、<link href="style.css">、<form action="submit.php"></form>、CSS 文件中 background: url(avatar.jpg)(注意:这是 HTML 解析时计算的,不是 CSS 引擎自己 resolve)
使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。
❌ 完全不受影响的:fetch('./api/user')、import('./utils.js')、@import "reset.css"、<iframe src="/admin/frame.html"></iframe>(根相对路径)、<img srcset="logo-2x.png 2x">
SPA 部署在子路径时,base 和构建配置容易冲突
部署在 https://example.com/a/b/c/ 时,<base href="/a/b/c/"> 和框架路由配置必须对齐,否则行为割裂:
- Vue Router / React Router v6+ 要显式传入
base: '/a/b/c/',它们不读document.baseURI - Webpack 的
publicPath和 HTML 中手写的<base href="/a/b/c/">若同时存在且值相同,资源路径可能被拼两次(如/a/b/c//a/b/c/js/app.js) - Vite 构建时若已设
base: '/a/b/c/',HTML 中就不该再手动加<base>标签 - Service Worker 缓存策略若依赖
self.location.origin + '/a/b/c/',而 HTML 没配<base>,预缓存路径就错位
动态创建元素、JS 模块导入、fetch 全部绕过 base
这是最容易被忽略的盲区。无论你设了 <base href="/v2/"> 还是 <base href="https://cdn.example.com/">,以下全部不受影响:
import('./utils.js') → 以模块自身位置为基准fetch('./data.json')、new Worker('./worker.js')、XMLHttpRequest.open('GET', 'api/users')
CSS 文件内的 @import "reset.css" → 仍按该 CSS 文件所在路径解析
换言之:<base> 是 HTML 解析层的规则,不是运行时的全局 URL 重写器。调试时发现图片 404,优先查 <base> 是否意外覆盖了路径;发现 fetch 失败,别怪 <base>,它根本没参与。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










