Web2.0 从网站到网页应用

我们认为网站一直只能通过 web server 获取静态的内容是远远不够的,在 Web2.0 时代(大约 2004 年左右),用户不仅仅只是能阅读网站上的内容,还能创造内容,这引领了动态网页的发展。

还记得 http 请求方式吗,之前我们只见到 GET 方法用于读取资源,现在需要其他的方法了。

随着内容管理系统的崛起,比如 WordPress,它的 web server 不仅仅允许用户读取网页的内容,还允许用户去操纵它们。

比如,使用内容管理系统的用户必须能够登录、发、更新、删博客并登出。在这个时期,创建这种类型的网站使用 PHP 等语言(在 web server 的服务端被解释运行)被认为是最合适的 。

image

通过服务端上的逻辑,开发者得以执行用户发送的读写请求。如果用户想要创建一篇博客并且点击了保存按钮,那么他写好的内容就会被发送到正在服务端上运行的逻辑里。

这段代码逻辑验证用户是否被授权,验证博客的内容并且把它写入数据库中。

所有的这些操作不能在客户端上发生,否则每一个用户将能够在不被授权的情况下随意玩弄数据库。

服务端路由

由于我们仍然使用服务端路由, web server 在用户成功创建博客后,能够重定向用户到一个新的页面。 比如,重定向到新发布的博客页面。

如果没有重定向, 那么一个 http post/put/delete 请求通常就会导致页面的刷新或重加载。

image

因为用户现在能够动态地创建内容了,我们需要一个数据库来储存这些数据。

数据库也能部署在与 web server 同样的物理服务器上(特别是早期 Web2.0)或者部署在另一个远程机器(大多数的现代的 web 开发)。

image

一旦在数据库中插入了一条博客,属于它的唯一的标识 id 将会被创建,这个 id 将能被用来重定向到用户新创建的博客页面。 这些步骤地发生都是异步。

image

现在,一个博客被创建后,server 是如何返回包含动态数据的 html 文件给前端的?其实这就是服务端渲染的过程(SSR server-side-rendering)

无论是 Web 1.0 面向消费者(静态页面)的网站,还是 Web 2.0 面向生产者(动态页面)的网站,都会从 server。一个用户在浏览器导航到一个 URL,并且请求 html 页面。然而对于 web 2.0 的动态页面来说,发送给 client 的 html 不再是 静态 html。从数据库中查询出来的数据被插入到 html 中了。

<?php if ($expression == true): ?>
  This will show if the expression is true.
<?php else: ?>
  Otherwise this will show.
<?php endif; ?>

不同语言的模板引擎(eg: Pug for JavaScrit on Node.js Twig for PHP, JSP for Java, Django for Python) 能够在 html 发给 client 前把动态的数据嵌入到页面中。拥有 server-side-rendering 的帮助,用户生成的内容可以被 server 放进 html 文件中并返回给用户。

我们在这里处理的仍然是一个网站(website)吗?技术上来说是的,但通过从带有数据库的 web server(或 application server)提供动态内容而超越静态内容的网站(website)也可以被称为 web application。但这两种类型之间的界限是模糊的。

Web 2.0 这个术语及它的热度,在大约 2010 年左右时开始减弱,因为 Web 2.0 的功能变得无处不在并失去了新鲜感。