要写一个类似 tomcat 的简易服务器,首先需弄清楚这几点:
1. 客户端(Client)和服务端(Server)的角色及作用
角色 A 向角色 B 请求数据,这时可以把 A 视为客户端,B 视为服务端。客户端的主要职责是
发送请求和接收服务端根据自己发送的请求返回的请求信息,而服务端的主要职责是接收请
求和返回请求数据。
2. 浏览器是什么及工作原理
我们常说 B/S,C/S 架构,所谓的 B/S 指 browser/server,C/S 指 Client/Server,B/S 架构其实就是
应用于浏览器的程序,只要最后在浏览器上展现的都是 B/S 架构,而非在浏览器上展现的
都是 C/S 架构,如常见的英雄联盟游戏。但是本质上只有 C/S 架构,因为浏览器是一种特殊
的客户端。
浏览器的特殊之处是有一下三大引擎:
� DOM 解析引擎:即浏览器可以解析 HTML
� 样式解析引擎:即浏览器可以解析 CSS
� 脚本解析引擎:即浏览器可以解析 JAVASCRIPT
3. Socket
上面提到的客户端服务端,他们之间是怎样实现连接及数据传递的,这就是 Socket,每一门
编程语言都有 Socket 编程,Socket 的作用就是提供了网络通信的能力
4. HTTP 协议及 HTTP 与 TCP/TP 的区别
客户端和服务端通过 Socket 实现了网络通信的能力,可以实现数据传递。而协议是规范数
据传输,也就是说客户端和服务端之间传输数据要按照一定得规范和标准传输,不能瞎传。
TCP/IP(Transmission Control Protocol/Internet Protocol):传输控制协议/网间协议
HTTP(HyperText Transfer Protocol):超文本传输协议。
TCP/TP 的区别:
做一个形象的比喻,TCP/TP 是马路,HTTP 则是马路上的汽车,所以 HTTP 一定是在 TCP/TP
的基础上的。
HTTP 主要是应用在 web 程序上,设计之初就是为了提供一种发布和接收 HTML 页面的方法,
这样说可能很抽象很难理解。具体的说当我们去访问一个网站时,只需要拿到基于这个网站
的内容(比如 html,css,JavaScript)。但我们抓取浏览器接收到的资源包(可以用 Fiddler 工具)
发现除了网页需要的实体内容还有一些下面信息:
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/plain; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Tue, 24 Jan 2017 03:25:23 GMT
Connection: close
Content-Length: 661
这就是 http 协议规范,比如 Content-Type 就是说传输的时候文件的格式,Content-Encoding
规定了编码格式。不止以上这些,非常多,关于这些参数含义这里就不去一一介绍
5. URL 的含义
URL( 统 一 资 源 定 位 符 ), 就 是 我 们 常 说 的 网 址 , 直 接 来 解 析 一 个 URL 来 说 明 他 :