欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HTTP 协议(上)

程序员文章站 2022-03-10 13:04:19
...

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:[email protected]表示指定特定身份
    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