react router 中的 hashHistory 和 browserHistory 有什么区别?

What is the difference between hashHistory and browserHistory in react router?

我用谷歌搜索了很多,但没有找到以下问题的明确答案:react-router 中的 hashHistory 和 browserHistory 有什么区别?

基本区别在于 hashHistory 使用如下 URL:http://myurl.com/#page/another_page/another_page

使用 BrowserHistory 可以获得正常的 url(无哈希):http://myurl.com/page/another_page/another_page

我认为问题不是要求格式上的差异,而是技术上的差异。因此,在这里分享这个答案有一个技术差异:

基本上浏览器不会在#

之后发送 url

所以假设一个网站限制了会员和管理员的区域。用户导航到 /member,并提示登录。但是,服务器在进入登录页面之前不知道用户是否试图访问 /admin 或 /member,因此在登录服务器后不会知道重定向到哪里。

1) 浏览器的历史位置数组包含的不仅仅是在我们的应用程序中访问过的位置。允许访问此列表会泄露有关用户浏览历史的信息,不应允许网站访问这些信息。

2) 浏览器历史记录创建位置对象,其路径名是 URL 的完整路径名。但是,您可以为历史指定一个基本名称,在这种情况下,完整路径名的一部分将被有效地忽略。

3) 静态文件服务器中的浏览器历史记录将在我们的服务器上有一个真实位置来获取我们的 HTML,而哈希历史记录使用 URL 的哈希部分来设置和读取位置。

4) 哈希历史是依赖性的,因为它将所有路径信息存储在 URL 的哈希中。

第一个区别:

他们使用不同的 WEB API。 <HashRouter> 使用并读取来自 URL 的散列, <BrowserRouter> 使用 window.history WEB API.

第二个区别:

<HashRouter> 用于静态 one-page 网站。基于浏览器的项目的理想选择。 <BrowserRouter> 用于动态网站。当你有一个将处理动态请求的服务器时应该使用(知道如何响应任何可能的 URL)。