我对此有点困惑,我觉得问这个问题有点愚蠢,但我想了解它。
因此,假设我正在使用客户端 Web 框架,例如 Backbone、Angular 或 Durandal。该框架包括路由。
但我当然仍然有一个服务器用于数据库的东西,等等,它也有路由。
我现在的问题是:

我很难想象这一点,因为客户端可以在服务器知道该请求之前进行路由。
如果有人能解释这两个路由系统如何协同工作,我将不胜感激。
P.S.:我没有包含代码示例,因为我不是在寻找关于特定框架的答案,而是关于一般的路由过程。

最佳答案

tl;博士:

  • 使用服务器端路由,只要单击链接,您就会下载一个全新的网页,
  • 客户端路由webapp下载、处理和显示新数据。


  • 想象一下用户点击了一个简单的链接:<a href="/hello">Hello!</a>
    在使用 服务器端路由 的 webapp 上:
  • 浏览器检测到用户点击了 anchor 元素。
  • 它向在 href 标签中找到的 URL 发出 HTTP GET 请求
  • 服务器处理请求,并发送一个新文档(通常是 HTML)作为响应。
  • 浏览器完全丢弃旧网页,显示新下载的网页。

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

  • 客户端路由听起来更复杂,因为它是。但是现在有些图书馆真的很容易。

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

    关于web-applications - 何时使用 "client-side routing"或 "server-side routing"?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23975199/

    10-13 07:40