何时使用“客户端路由”或“服务器端路由”?
我对此有点困惑,我觉得这个问题稍微有些愚蠢,但是我想理解它。
所以说,我正在使用客户端Web框架,如骨干,Angular或Durandal。 这个框架包括路由。
但我当然还有一个服务器的数据库的东西,等等,这也有路由。
我现在的问题是:
何时使用“客户端路由”或“服务器端路由”?
如何“决定”在客户端是否已经执行了路由select或请求是否首先发送到Web服务器?
我很难想象这一点,因为客户端可以在服务器知道该请求之前进行路由。
如果有人能够解释这两个路由系统如何协同工作,我将非常感激。
PS:我没有包含代码示例,因为我不是在寻找关于特定框架的答案,而是关于一般的路由过程。
TL;博士:
- 使用服务器端路由,只要点击一个链接,就可以下载一个完整的新网页,
- 与客户端路由的webapp下载,处理和显示新的数据给你。
想象一下用户点击一个简单的链接: <a href="/hello">Hello!</a>
在使用服务器端路由的Web应用程序上:
- 浏览器检测到用户点击了一个锚点元素。
- 它会对在
href
标记中find的URL发出HTTP GET请求 - 服务器处理请求,并发送一个新的文档(通常是HTML)作为响应。
- 浏览器完全丢弃旧网页,并显示新下载的网页。
如果webapp使用客户端路由 :
- 浏览器检测到用户已经点击了一个锚点元素,就像以前一样。
- 客户端代码(通常是路由库)捕获此事件,检测到URL不是外部链接,然后阻止浏览器发出HTTP GET请求。
- 然后,路由库手动更改浏览器中显示的URL (使用HTML5历史loggingAPI,或者在旧版浏览器上使用URL hashbangs)
- 路由库然后更改客户端应用程序的状态 。 例如,它可以根据路由规则更改根React / Angular / etc组件。
- 应用程序(特别是MVC库,如React)然后处理状态更改。 它呈现新组件,并在必要时从服务器请求新数据。 但是这次响应不一定是整个网页,也可能是“原始”数据,在这种情况下,客户端代码将其转换为HTML元素。
客户端路由的声音更复杂,因为它是。 但是现在有些图书馆真的很容易。
客户端路由有几个好处:你下载较less的数据来显示新的内容,你可以重用DOM元素,向用户显示加载通知等。然而,在服务器端生成DOM的webapps更容易抓取(通过search引擎),从而使SEO优化更容易。 结合这两种方法也是可能的,优秀的stream量路由器SSR就是一个很好的例子。
我认为客户端路由被单个页面应用程序使用,实际的网站从不离开。
路由工作通过附加到客户端路由框架所反应的当前页面来工作。
的index.html#/ mysubpage
服务器端路由类似于apache通过它的url调用子网时默认的function,但是node.js通过使用路由来实现这一点,因为html文件需要首先被渲染。
如果您有一个客户端路由框架的SPA,并且您正在使用Node.js,则仍需要服务器端路由来在站点之间切换