对比项 | 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 |
是否发给服务器 | ✅ 不会 | 会发给服务器 |
前端能否拦截 | ✅ 前端直接处理 | ❌ 必须服务器先放行 |