web,严格地说是WWW(world wide web)即全球广域网,也称为万维网,直观的说就是网页(前端)或者说网站(后端),是人类自1946年进入信息时代以来应用最广泛的一项信息服务,因而学会web开发是很有意义的。
首先第一个问题,什么是web?web是基于HTTP的网络应用程序,它肯定是程序,而且是应用层的程序,不是内核程序也不是系统程序,而且它不是一个单机程序,它是分布式的,这意味着它一定会基于某个网络协议,我们知道设计并编写一个网络程序,第一步就是要设计协议,之后在协议这样一个分布式架构的基础上添加各部分的功能,web也是这样的,它是基于HTTP这样一个协议的,因而想要弄清楚什么是web,关键是弄清楚什么HTTP?
HTTP(Hyper Text Transfer Protocol,超文本传输协议),这个超文本指的是HTML文本,HTTP协议的分布式架构是B/S架构,S指的是web服务器,比如tomcat,它的作用是负责与浏览器和其上的CGI通信,CGI作为一个API集合负责后端与前端的交互(其实后端是先与CGI交互,继而与web服务器交互,继而与浏览器交互,最终和前端界面进行交互),B指的是浏览器,浏览器的作用是负责与web服务器和其上的前端界面通信,浏览器的前端严格来说并不是程序,它是一种基于浏览器的脚本程序,以下图表展示了HTTP协议通信流程:
注意HTTP协议的几点特点(摘自菜鸟):
- HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
- HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
另外,HTTP协议是基于TCP协议的,TCP协议基于IP协议即Internet。
通过上文对HTTP协议的认识,我们可以看出,要开发一个web出来,需要开发三部分的内容:
①前端:浏览器界面的设计与实现,这需要学习HTML(布局)、CSS(样式)、JavaScript(动态)、vue(前端框架)、AJAX(异步的JS和XML);
②后端:servlet,servlet是CGI,是后端业务逻辑程序与web服务器通信的接口,后续还会学习基于servlet的后端框架;
③数据库:SQL语言,以MySQL为准进行学习(后端程序通过JDBC与数据库相连)。
以上内容简述了HTTP的概念和特点,理解HTTP的概念即B/S体系结构是至关重要的,所有web程序都是基于这样的架构。理解下面这个问题至关重要:“一个web程序是基于HTTP的”这句话中的“基于”是什么意思?
“基于”的意思是我们得有一个浏览器和服务器,二者做了什么事情呢?两件事情,一是也是最基本的就是底层的通信即HTTP协议包的封装和解析,二是与上层的web程序进行交互,服务器通过servlet与上层的Java程序交互,浏览器将解析出的HTML文档渲染到界面上或从界面上获取用户输入。
以下是有关HTTP的一些具体内容(在浏览器界面键入F12可打开该页面的浏览器后台,里面可以看到有关该页面的全部信息,在network一栏可以看到该页面的HTTP信息,注意,一个页面一旦传过来,连接一般就断开了,就不会有网络流量了,因而你想看关于这个页面的HTTP信息,可以在打开后台以后刷新该页面):
①HTTP请求的格式如下:
请求行:请求类型 URI(URL端口号后面的所有内容) 协议版本号
请求头:key: value(冒号后面有一个空格)
请求空行
请求体:GET类型是没有请求体的,它的输入在请求行的URI中
②HTTP响应的格式如下:
状态行:协议版本号 状态码 状态说明
响应头:同上
响应空行
响应体:HTML文档