<base> 标签重置 HTML 解析器对后续相对 URL 的基准起点,必须为绝对 URL 或根相对路径且结尾带斜杠,须置于 <head> 最顶部且唯一,仅影响 HTML 解析阶段的硬编码相对路径。

base 标签不是“加前缀”,而是重置 HTML 解析器对所有后续相对 URL 的基准起点——写错一个字符,<img src="logo.png"> 就 404,且浏览器不报错、不警告,只静默失败。
base href 必须是绝对 URL 或根相对路径(结尾带斜杠)
浏览器只接受 href 值以 https://、http://、// 或 / 开头,否则整条 <base> 被丢弃。这不是容错逻辑,是硬性校验。
-
href="static/"→ 缺协议和根路径,被忽略 -
href="../assets/"→ 含..,被忽略 -
href="/myapp"→ 结尾没斜杠,Firefox/Opera 可能截断成/myappcss/,导致style.css请求错乱 -
href="https://cdn.example.com/v3"→ 同样缺斜杠,url(icon.png)可能拼成https://cdn.example.com/v3icon.png
✅ 正确写法:
-
<base href="https://cdn.example.com/v3/">(推荐,部署可控) -
<base href="/myapp/">(合法,结尾必须带/) -
<base href="//cdn.example.com/v3/">(协议相对,自动继承当前协议)
base 标签必须放在 <head> 最顶部且唯一
<base> 的作用是为“后续所有相对 URL”重置解析起点,这个动作发生在 HTML 解析阶段,且仅对它之后出现的标签生效。
立即学习“前端免费学习笔记(深入)”;
- 放在
<title>或<link>后面 → 已解析的资源不受影响 - 放进
<body>→ 浏览器直接忽略,无提示 - 多个
<base>→ 只有第一个生效,Chrome 控制台提示Multiple base elements detected. Only the first one is used. - 用 JS 动态插入:
document.head.appendChild(baseEl)→ 解析阶段早已结束,已加载的<img src="x">不会重算
正确顺序示例:
<head> <base href="/myapp/"> <title>My App</title> <link rel="stylesheet" href="main.css"> <script src="app.js"></script> </head>
哪些资源受 base 影响,哪些完全不受
<base> 只在 HTML 解析阶段起作用,不是运行时代理或全局重写中间件。
- ✅ 明确受影响(HTML 属性中硬编码的纯相对路径):
<img src="logo.png">、<script src="main.js">、<link href="style.css">、<form action="api/login">、CSS 中的background: url(icon.svg)(注意:这是 HTML 解析时计算的) - ❌ 完全不受影响(JS/CSS 运行时路径):
fetch('./data.json')、import('./utils.js')、new Worker('./worker.js')、@import "reset.css" - ⚠️ 半受影响:
document.baseURI返回<base href>值,可用于new URL('api/user', document.baseURI);但window.location和document.URL完全不变
SPA 部署时 base href 必须与构建配置、路由 base 对齐
单页应用部署到子路径(如 https://example.com/myapp/)时,<base href="/myapp/"> 是必要但不充分条件。
- Vue Router 必须同步设
createWebHistory('/myapp/'),否则router.push('/home')会跳到https://example.com/home - Vite 构建若已配
build.base: '/myapp/',HTML 中再手动写<base href="/myapp/">会导致路径拼两次(如/myapp//myapp/assets/index.js) - Webpack 的
publicPath若设为'/',但 HTML 有<base href="/myapp/">,runtime chunk 会从/myapp/加载,而实际文件在/下,结果 404
最容易被忽略的点:所有配置项的值必须严格一致 —— 不能一个带斜杠一个不带,不能一个用绝对 URL 一个用根相对路径,也不能一个写 /myapp/、另一个写 /myapp。



















