一.五层网络模型介绍
1.经典五层模型
- 应用层 HTTP/FTP
- 传输层 TCP/UDP
- 网络层 [网络层为数据在结点之间传输创建逻辑链路]
- 数据链路层 [在通信实体之间建立数据链路连接]
- 物理层 [主要作用是定义物理设备如何传输数据]
2.传输层
- 向用户提供可靠的端到端服务
- 传输层向高层屏蔽了下层数据通信的细节
3.应用层
- 为应用软件提供了很多服务
- 构建于TCP协议之上
- 屏蔽网络传输相关细节
二.Http协议发展历史
1.Http/0.9
- 只有一个命令GET
- 没有HEADER等描述数据的信息
- 服务器发送完毕,就关闭TCP连接
2.Http/1.0
- 增加了很多命令
- 增加了status code和header
- 多字符集支持,多部分发送/权限/缓存等
3.Http/1.1
- 持久连接
- pipeline
- 增加host和其他命令,有了host之后可以在同一个服务器上跑多个web服务,通过host字段表示请求同一个物理服务器
4.Http2
- 所有数据以二进制传输
- 同一个连接里面发送多个请求不再需要按照顺序来
- 头信息压缩以及推送等提高效率的功能(推送的概念是服务端可以主动发起请求的,通常情况下我们需要加载完html后才会通过标签引入的形式加载js和css文件,但是如果Http2的话,可以做到html/js/css同时加载)
三.Http三次握手
1.TCP Connection
- 在客户端与服务器之间进行Http请求的发送和返回的过程中,我们需要创建Tcp Connection
- 请求和响应都是数据包,其中是需要传输通道的,传输通道是在Tcp中创建客户端发起/服务端接收的连接,Http请求是在这个基础上发送的,即一个Tcp连接上面可以发送多个Http请求的
- 在Http1.1阶段允许声明请求发送后Tcp Connection不关,当第二个请求发送时还是通过刚才创建的Tcp Connection。好处在于Tcp连接创建的时候有三次握手的消耗(三次网络传输),只有创建了TcpConnection才能发送Http请求。
2.三次握手时序图
- 通过三次握手规避由于网络延时等问题导致服务器不必要的开销
四.URI/URL/URN
1.URI
- URI: Uniform Resource Identifier 统一资源标志符
- 用来标识互联网上特定信息资源
- 包含URL和URN
2.URL
- Uniform Resource Locator 统一资源定位器
- URL格式:
http://[scheme协议部分]user:passord[如果资源需要用用户名和密码登陆时在这部分写用户名和密码]@host.com[域名用来定位资源所在服务器在互联网中的位置]:80[端口]/path[路由]?query=string[搜索参数]#hash[锚点定位]
- 注意不仅仅是Http的链接称作URL,很多其他协议的链接也称为URL,如ftp协议等等
3.URN
- 永久统一资源定位符
- 通常情况下,当资源移动后,我们访问之前的链接就会报404。URN解决了这个问题,实现了在资源移动之后还能被找到
- 目前还没有非常成熟的使用方案
五.Http报文
1.请求报文
2.响应报文
3.Http方法
- 用来定义对于资源的操作
- 常用有GET/POST/PUT/DELETE
- 从定义上讲有各自的语义
4.Http Code
- 定义服务器对请求的处理结果
- 各个区间的Code有各自的语义
- 好的Http服务可以通过Code判断结果
六.使用Node构建简单Web服务
const http = require('http');
http.createServer((request, response)=>{
console.log('Request come:', request.url);
response.end('123');
}).listen(8888);
console.log('Server listening on 8888');
- 效果演示