网站是什么?
最简单的定义
李笑来聊过定义这事,大意是他会对习以为常的概念进行提炼,得出最精炼的定义。而且是过几年就重新归纳一次,最后得到的定义,简单而富有美感,这种思考模式值得我去学习,因此,我也学着他的想法,对网站这个后端程序员最熟悉的概念进行总结归纳,由此梳理一下整个技术栈。
网站最简单的定义是什么呢?如果让我归纳,我第一时间想到的定义是这样的:
网站是一个给访问的用户提供信息,完成特定的任务的一个工具。
因此,网站要完成两件事:
- 提供信息
- 完成任务
接下来,就让我们详细地聊聊这两件事。
提供信息
我们用百度,是因为百度能给我们提供我们所需要的信息,而承载着这些信息的,正是一个个网站中网页里包含的文字。
因此,一个网站必须要有文字。因为文字是信息的载体,而如果只是单纯地显示文字,并不能给用户带来良好的阅读体验,因此需要对文字进行排版。为了对文字进行排版,便诞生了HTML(Hyper Text Markup Language 超文本标记语言),通过 <标签名 属性>文字内容</标签名>
通过声明不同的标签,文字会在屏幕上显示出不同的颜色、字体和大小。这就是最开始的排版。
渐渐的,人们发现这种排版很多时候是重复的劳作,比如很多页面,只是文字内容不同,但是排版的方式是一致的,有没有办法减少这种重复的工作。于是CSS(Cascading Style Sheets 层叠样式表)应运而生,它通过指定类别或者属性名的方式,对一类文字进行统一的排版,这样就可以达到一次编写,处处可用的效果。
有了 HTML 和 CSS ,人们就搭建出了一种拥有固定排版样式的网页,由于网页的样式是一直静止不变的,因此就被称作静态页面网站。但相较于一成不变的网页,人们更喜欢会动的页面,正如漫画火了之后会进行动画化一样。当人们不满足于静止不动的网页时,势必就需要新的工具来解决这个动态页面这个问题。
于是 JS 被选中,JS 可以改变 HTML 的属性和结构,因此可以让一个页面显示出动态变化的效果。但原生的 JS 太复杂以至于难以使用,而抽象是应对复杂度最有利的武器,因此不断有新的工具对 JS 进行抽象封装,其中有名的就有 JQuery、Vue.js 等。
这就是网站为了提供信息而产生的路径演变,这一部分后来也被称为前端。
完成任务
早期的网站专注于给人们提供信息,比如在网站上标注公司电话、邮箱等方式,让人们通过这些联系方式进行交流,以便人们完成任务。后来,有的聪明人一合计:既然网站可以提供信息,那么为什么不让网站把一些重复性的工作也一并完成了呢?这样效率更高,之前需要1百个人同时接电话来确认业务,如果现在能用一台服务器完事,岂不是美滋滋?
于是网站就开始承担“完成任务”这个重担,网站完成的任务分为两类:
- 网站建立者的任务
- 收集资料
- 网站使用者的任务
- 网上购物
- 看视频
如果要完成任务,就必须先获取信息,而获取信息之前要知道使用者姓甚名谁,这样才能知道这条信息是谁发的,那条信息是谁需要的,其次是可以接收信息,能够接收用户输入的信息;然后就是处理信息,最后是返回处理好的信息。这个过程跟计算机的工作原理是一样的,抽象来说就是输入、处理、输出。只不过输入和输出由客户端的浏览器完成,而处理这一块则由网站所在的服务器来完成。现在大热的云游戏,本质上也是如此,由于网速不断变快,速度接近电脑中的总线速度,因此可以实现随时随地玩游戏。
下面一步步来说以上的过程都设计到了什么技术:
-
区分用户:想要知道哪条消息对应哪个用户,那么最简单的方法就是做标记,由客户端对消息做标记的方式,我们称之为:Cookie。而由服务器对消息做标记的方式,就被称之为:Session。通过这两项技术,我们就可以知道消息三问“我是谁?从哪来?到哪去?”的答案了。
-
接收信息:用户在网页上面,通过输入框和按钮输入了各种各样的信息,接下来就通过网络将这些信息传递到服务器上,服务器接收到了用户传来的信息之后,就需要把用户的信息存起来,以便在需要的时候可以找出来。如果只有一个用户,那么把信息保存在TXT格式的文本上也是可以的,但是如果用户量一多,就会面临各种各样的问题,比如:如何快速找到用户的信息,当服务器发生故障的时候如何恢复,如何保证用户数据的一致性等等,面对诸如此类各种复杂的问题,就需要有专门的的软件来帮忙解决了,因此负责管理数据的软件就此诞生,这就是数据库,数据库的作用最简单的说,就是 把用户的信息存起来,在需要的时候可以找出来。随着业务的发展,数据库也诞生了各种的类型,以便适应各种不同的业务类型,这些我们先按下不表(主要是还未掌握),之后单独开一章来论述。
-
处理信息:处理用户传来的信息,就需要编写代码来完成了,这一块就是程序员常说的业务逻辑,而程序员要干的活就是直接通过网络或者从数据库里拿出信息,然后编写逻辑来对数据进行处理,加工成需要的数据,然后把数据存入数据库等待下一次的使用,或者直接给用户返回信息。
-
返回信息:承载返回的信息的载体有多种,最开始的返回一个渲染后的网页,而后是字符串,字符串的格式又从XML进化到了JSON,如今最常用的载体就是JSON格式的信息。
而返回的信息一般分为两种
- 服务器返回的信息:各种响应代码,如最著名的404,这是服务器根据相关情况判断后自动返回的
- 程序员编写的返回信息:告诉用户信息处理的结果,或者是给与用户所需要的数据。
顺带一提,上面是对用户和网站的信息交互的抽象描述,而往深一层去看,如何将客户端的消息传递到服务器,这涉及到计算机网络的知识内容,在之后的章节(等我掌握之后)我们再详细道来。