| 对比项 | Hash 路由 | Browser 路由 |
|---|---|---|
| URL 结构 | http://example.com/#/user/123 | http://example.com/user/123 | |
| 是否发送到服务器 | ❌ 否(# 后内容不发) | ✅ 是(需服务器支持) |
| 依赖 API | window.onhashchange | history.pushState() / replaceState() |
| 刷新页面是否 404 | ✅ 不会(前端自己处理) | ⚠️ 会(需服务器配置 fallback) |
| SEO 友好性 | ❌ 差(搜索引擎忽略 #) | ✅ 好(URL 正常) |
| 兼容性 | ✅ 支持 IE8+ | ✅ 需 IE10+(HTML5 History) |
| 开发复杂度 | 简单 | 稍高(需服务端配合) |
| 路由参数 | 支持查询参数 ?a=1 | 支持动态路由 /user/123 |
| 是否发给服务器 | ✅ 不会 | 会发给服务器 |
| 前端能否拦截 | ✅ 前端直接处理 | ❌ 必须服务器先放行 |