HTTP 协议(上)
1. 经典五层模型
应用层-传输层-网络层-数据链路层-物理层
1.1 后三层
- 物理层主要作用是定义物理设备如何传输数据
- 数据链路层在通信的实体间建立数据链路连接
- 网络层为数据在结点之间传输创建逻辑链路
1.2 传输层
- 向用户提供可靠的端到端(End-to-End)服务
- 传输层向高层屏蔽了下层数据通信的细节
1.3 应用层
- 为应用软件提供了很多服务
- 构建与 TCP 协议之上
- 屏蔽网络传输相关细节
2. HTTP 发展历程
2.1 HTTP/0.9
- 只有一个命令 GET
- 没有 HEADER 等描述数据的信息
- 服务器发送完毕,就关闭 TCP 连接
2.2 HTTP/1.0
- 增加了众多命令(post 等)
- 增加了 status、code 和 header
- 多字符集支持、多部分阿松、权限、缓存等
2.3 HTTP/1.1
- 持久连接
- 增加 pipeline:可以在同一个链接里面发送多个请求
- 增加了 host 和其他一些命令
2.4 HTTP2
- 所有数据以二进制传输
- 同一个连接里面发送多个请求不再需要按照顺序来
头信息
压缩以及推送等提高效率的功能
3. HTTP 三次握手
3.1 三次握手时序图
client->server: SYN = 1,Seq = X
server->client: SYN = 1,ACK = X + 1,Seq = Y
client->server: ACK = Y + 1,Seq = Z
4. URI、URL、URN
4.1 URI
Uniform Resource Identifier/统一资源标识符
- 用来唯一标识互联网上的信息资源
- 包含 URL 和 URN
4.2 URL
-
Uniform Resource Locator/统一资源定位器
http://user:pass@host.com:80/path?query=string#hash user:pass@表示指定特定身份 host用于定位一台机器 :80表示端口 /path表示路由 query=string表示搜索参数 hash表示文档的某个片段
-
此类格式都叫做 URL,比如 ftp 协议
4.3 URN
Uniform Resource Locator/永久统一资源定位器
- 在资源移动之上欧还能被找到
5. HTTP 报文
5.1 请求报文
- 起始行:
GET /test/hi-there.txt HTTP/1.0
- 首部:
Accept: text/*
Accept-language: en,fr
5.2 响应报文
HTTP/1.0 200 OK
- 起始行:HTTP/1.0 200 OK
- 首部:
Content-type: text/plain
Content-length: 19
首部与主体之间需要有一个完整的空行 - 主体:hello world
5.3 HTTP 方法
- 用来定义对于资源的操作
- 常用有 GET、POST 等
- 从定义上讲有各自的语义
5.4 HTTP CODE
-
定义服务器对请求的处理结果
-
各个区间的 CODE 有各自的语义
- 100-199 代表操作要持续进行,需要接下来做其他事情
- 200-299 代表操作是成功的
- 300-399 代表重定向
- 400-499 代表发送请求有问题
- 500-599 代表服务器发生问题
-
好的 HTTP 服务可以通过 CODE 判断结果
6. 创建简单的 HTTP 服务
const http = require('http')
http
.createServer(function(request, response) {
console.log('request come', request.url)
response.end('123')
})
.listen(8888)
console.log('create sucess')