哈希路由
哈希路由 (Hash routing) 是一种客户端技术,用于单页应用程序 (SPA) 中,在不重新加载整个页面的情况下管理导航和状态更改。
历史背景
早期的 SPA 在不重新加载页面的情况下无法更改 URL 的 路径部分。为了解决这个问题,开发者使用了基于哈希的 SPA 路由,它将路由存储在 "片段" 中,即 URL 中 #
符号后面的部分。常见的模式包括 #/profile
和 #!/profile
。应用程序会持续检查 window.location.hash
(或者在稍后支持时监听 hashchange
事件),以检测用户导航期间的片段更改;然后 SPA 在片段更改时更新视图。
局限性
虽然这种方法不需要服务器设置,但它存在局限性:后退/前进支持有限,带有基于哈希的 URL 的页面无法被正确索引(搜索引擎会忽略片段),并且生成的 URL 被认为不够美观。
基于哈希的路由现在被认为是一种遗留技术。如果使用的话,也仅作为对非常旧的浏览器的回退方案,或者用于无法配置服务器端路由的静态主机。
现代替代方案
到 2012 年,所有主流浏览器(Chrome 5、Safari 5、Firefox 4)都支持 History API。SPA 现在可以调用 pushState()
、replaceState()
和 popstate
事件来操作浏览器的历史堆栈,直接切换到 /profile
等路径,并在不完全重新加载的情况下更新视图。这还允许使用更简洁、不带哈希片段的 URL。