什么时候使用“客户端路由”或“服务器端路由”?

我对此有点困惑,我觉得问这个问题有点愚蠢,但我想理解它。

因此,假设我正在使用一个客户端 web 框架,比如 Backbone、 Angular 或 Durandal,这个框架包括路由。

但是我当然还有一个用于数据库的服务器,等等,它也有路由。

我现在的问题是:

什么时候使用“客户端路由”或“服务器端路由”?

如何“决定”路由是否已经在客户端执行,或者请求是否首先发送到 Web 服务器?

我很难想象这种情况,因为客户端可以在服务器了解请求之前进行路由。

如果有人能解释一下这两个路由系统是如何协同工作的,我将非常感激。

附注: 我没有包括代码示例,因为我不是在寻找一个特定框架的答案,而是在寻找一般的路由过程。

23433 次浏览

我认为 客户端路由是由单页应用程序使用,其中实际的网站从来没有离开。

路由通过附加到当前页面来工作,客户端路由框架在该页面上作出反应。

.html #/mysubpage

服务器端路由 类似于 apache 默认情况下通过 URL 调用子站点时的做法,但 node.js 通过使用路由来实现这一点,因为需要首先呈现 html 文件。

如果您有一个带有客户端路由框架的 SPA,并且正在使用 Node.js,那么仍然需要服务器端路由来在站点之间进行切换

医生:

  • 使用伺服器端路由,只要你按一下连结,便可下载整个新网页,
  • 与客户端路由的 webapp 下载,处理和显示新的数据为您。

假设用户点击一个简单的链接: <a href="/hello">Hello!</a>

在一个使用 服务器端路由服务器端路由的网络应用程序上:

  • 浏览器检测到用户单击了锚元素。
  • 它对在 href标记中找到的 URL 发出 HTTPGET 请求
  • 服务器处理请求,并发送一个新的文档(通常是 HTML)作为响应。
  • 浏览器将旧网页全部丢弃,并显示新下载的网页。

如果 webapp 使用 客户端路由:

  • 浏览器检测到用户已经单击了一个锚元素,就像以前一样。
  • 客户端代码(通常是路由库)捕获此事件,检测 URL 不是外部链接,然后通过发出 HTTP GET 请求检测 阻止浏览器
  • 然后在浏览器中显示路由库 手动更改 URL(使用 HTML5历史 API,或者在较老的浏览器上使用 URL hashbang)
  • 例如,它可以根据路由规则更改根 React/Angular/etc 组件。
  • 然后,应用程序(特别是 MVC 库,比如 React)处理状态更改。它呈现新的组件,如果需要,它会从服务器请求新的数据。但是这次的响应不一定是一个完整的网页,它也可能是“原始”数据,在这种情况下,客户端代码将其转换成 HTML 元素。

客户端路由听起来更加复杂,因为它的确如此。但是现在有些库确实使它变得更加简单。

客户端路由有几个好处: 可以下载更少的数据来显示新内容,可以重用 DOM 元素,向用户显示加载通知等。然而,在服务器端生成 DOM 的 webapps 更容易抓取(通过搜索引擎) ,从而使 SEO 优化更容易。将这两种方法结合起来也是可能的,优秀的 流量路由器 SSR就是一个很好的例子。

现代应用程序通常以“混合”或“混合”的方式使用客户端和服务器端路由,因此很难在这两种技术之间划清界限。

为了更好地理解 什么时候怎么做使用服务器端路由和客户端路由,你可能必须弄清楚当你有一个用于管理大型制造公司的大型应用程序时会发生什么(这在现实世界中并不经常发生。这只是一个有用的例子)。

在这些情况下,您可能会有不同的 (不同的 角色)谁看到这个复杂的环境不同的 零件(不同的 方面域名)。例如,工程师会看到一个文件服务器,里面有很多数字文档,而在公司食堂工作的人会看到要准备的菜单、工作时间表和商店。这些是完全不同的应用程序“域”,它们需要完全不同的 UI,因此为每种类型的用户提供不同的 SPA 是有意义的。

在这种情况下,您可以使用服务器端路由到 发球一个特定的 UI (SPA)到一个特定的用户,而您可以使用客户端路由到这个 UI 中的 导航(和 装弹数据)。把这些 SPA 看作是“仪表板”或“控制面板”,专门用于特定的“任务”,并由特定类型的“专业人士”使用。

例如,你可以为你所有的工程师设计一条/myapp/engineering 路线,为你所有的员工设计一条/myapp/食堂路线。这些 URL 中的每一个都代表一个特定的 域名,并将 发球一个特定的 仪表盘到一个特定类型的 使用者。这些 URL 将由 服务器端管理。

相反,您将在每个 仪表盘中使用 客户端路由到 导航,加载数据并根据需要重新配置 UI。

当然,您的应用程序可能还有一个由 SPA 使用的 RESTful API 来获取它们需要的数据。属于 REST API 的 URL 必须在服务器端进行管理,以执行它们的工作(即使它们不与真正的 HTML 页面相关联) ,并且只能由您的 SPA“幕后”调用。它们通常保存在一个单独的“域”中,比如/myapp/api。

静态网页(如“联系人”页面和“关于”页面)通常保存在/myapp/静态文件夹(或“域”)和托管服务器端(这个文件夹或“域”可以——而且通常是——托管在不同的服务器上)也是如此。

因此,您可能应该使用服务器端路由到 分开应用程序域,并使用客户端路由到每个域内的 导航