HTTP 协议(上)

HTTP 协议(上)

1. 经典五层模型

应用层-传输层-网络层-数据链路层-物理层

1.1 后三层

  1. 物理层主要作用是定义物理设备如何传输数据
  2. 数据链路层在通信的实体间建立数据链路连接
  3. 网络层为数据在结点之间传输创建逻辑链路

1.2 传输层

  1. 向用户提供可靠的端到端(End-to-End)服务
  2. 传输层向高层屏蔽了下层数据通信的细节

1.3 应用层

  1. 为应用软件提供了很多服务
  2. 构建与 TCP 协议之上
  3. 屏蔽网络传输相关细节

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:[email protected]: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')

你可能感兴趣的:(http)