前面介绍了 Undertow 是一个 Web 服务器,这一篇介绍什么是 Web 服务器,以及介绍网络基础知识。
Web 服务器是提供 web 页面服务的软件,web 页面一般包含 HTML,CSS 样式和 Javascript 代码。大部分 web 服务器是 HTTP服务器,使用 HTTP 协议提供 web 页面服务。
业界比较著名的 web 服务器分别是 Apache 和 Nginx。
那么一个 HTTP 请求是如何到达web服务器?HTTP 协议内容又是什么样子的?下面内容介绍网络模型和 HTTP 协议。
如上图所示,网络模型分为7层,分别是:
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理层
越下面的层,越靠近硬件;越上面的层,越靠近用户。每一层都是为了完成一种功能。为了实现这些功能,就需要大家都遵守共同的规则。大家都遵守的规则,就叫做"协议"(protocol)。
互联网的每一层,都定义了很多协议。这些协议的总称,就叫做"互联网协议"(Internet Protocol Suite),它们是互联网的核心,下面主要介绍 web 服务器的主要协议,HTTP 协议。
HTTP(HyperText Transfer Protocol,超文本传输协议)是基于 TCP/IP 协议的应用层协议。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。
HTTPS 经由HTTP 协议进行通信,但利用 SSL/TLS 协议来加密数据包。
HTTP 现在主流的版本是1.1,HTTP2已经开始普及。
- 请求格式
GET /data HTTP/1.1
Host: localhost:3000
Connection: keep-alive
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Referer: http://localhost:3000/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8
HTTP 请求数据由三部分组成,分别是请求行、请求报头、请求正文,上面例子的第一行就是请求行,其他都是请求报头,没有请求正文。
- 返回格式
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 30
ETag: W/"1e-lIY93D4yuE1ATYO3FpKsa8XcLLs"
Date: Fri, 24 May 2019 10:09:02 GMT
Connection: keep-alive
{
"content": "hello world"
}
HTTP 的响应也是由三部分组成,分别是状态行、响应报头、报文主体,第一行是状态行,中间部分是相应报头,后面是报文主体。