【青训营】图解HTTP

48 阅读5分钟

这是我参与「第四届青训营 」笔记创作活动的第11****天

第一章:序

HTTP

HTTP:超文本传输协议,但是这种译法并不严谨;严谨的译名应该为“超文本转移协议”

成长时代

1990年11月,CERN成功研发了世界上第一台Web服务器和Web浏览器

  • HTTP/1.0
    • HTTP 正式作为标准被公布是在 1996 年的 5 月,版本被命名为 HTTP/1.0,并记载于 RFC1945。虽说是初期标准,但该协议标准至今仍 被广泛使用在服务器端
  • HTTP/1.1
    • 1997 年 1 月公布的 HTTP/1.1 是目前主流的 HTTP 协议版本。当初 的标准是 RFC2068,之后发布的修订版 RFC2616 就是当前的最新版本

网络基础TCP/IP

HTTP属于TCP/IP的一个子集

TCP/IP各层

  1. 应用层
    1. 应用层决定了向用户提供应用服务时通信的活动 (HTTP也属于该层)
  2. 传输层
    1. 传输层对上层应用层,提供处于网络连接中的两台计算机之间的 数据传输
  3. 网络层
    1. 网络层用来处理在网络上流动的数据包。数据包是网络传输的最小 数据单位
  4. 链路层
    1. 用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动

各种协议与HTTP协议的关系

第二章:简单的HTTP笔记

客户端(请求访问资源的一端)

服务端(提供响应资源的一端)

请求与响应

服务端响应,客户端发送请求

HTTP状态

http是无状态协议,对于发送过的请求与响应都不做持久化处理

HTTP/1.1引入cookie管理状态

请求URI定位资源

URL是URI的子集

发送请求

  1. URI为完整的请求URI

GET hackr.jp/index.html HTTP/1.1

  1. 在首部字段Host中写明网络域名或IP地址

GET /index.html HTTP/1.1

常用HTTP方法

GET:获取资源

POST:传输实体主体

PUT:传输文件

HEAD:获取报文首部

DELETE:删除文件

LINK和UNLINK已被HTTP/1.1废弃

持久连接

HTTP/1.0中每进行一次通信就要断开一次TCP连接

为了解决上述问题,HTTP/1.1想出了持久连接( HTTP Persistent Connections,也称为 HTTP keep-alive 或 HTTP connection reuse )

管线化

发送多个HTTP请求

三次握手与四次挥手

  1. 客户端发送一个SYN与SEQ,
  2. 服务端接收后发送一个SYN包回去。ACK = x + 1,表示确认收到(客户端发来的Seq值 + 1),Seq = y, 表示让客户端确认是否能收到
  3. 客户端再次发送确认包(ACK),ACK = y + 1, 表示确认收到服务器的包(服务端发来的Seq值 + 1)

使用Cookie的状态管理

Cookie 技术通过在请求和响应报文中写入 Cookie 信 息来控制客户端的状态

Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie

第三章:HTTP报文内的HTTP信息

客户端的HTTP报文叫做请求报文,响应端的叫做响应报文

报文结构

  1. 请求行
    1. 包含用于请求的方法
  2. 状态行
    1. 包含表明响应结果的状态码
  3. 首部字段
    1. 包含表示请求和响应的各种条件和属性的各类首部
  4. 其他
    1. cookie等

范围请求

解决网络中断,需要重头开始的问题

使用Range首部字段

Range:bytes=5001-10000

Range:bytes=5000-

第四章:HTTP状态码

类别

  • 200 OK
    • 表示请求被正常处理了
  • 204 No Content
    • 请求已成功处理,但在返回的响应报文 中不含实体的主体部分
  • 206 Partial Content
    • 客户端进行了范围请求,而服务器成功执行了这部分 的 GET 请求
  • 301 Moved Permanently
    • 永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以 后应使用资源现在所指的 URI
  • 302 Found
    • 临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希 望用户(本次)能使用新的 URI 访问
  • 303 See Other
    • 该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源
  • 304 Not Modified
    • 该状态码表示客户端发送附带条件的请求 A 时,服务器端允许请求 访问资源,但未满足条件的情况
  • 307 Temporary Redirect
    • 临时重定向。该状态码与 302 Found 有着相同的含义。尽管 302 标 准禁止 POST 变换成 GET,但实际使用时大家并不遵守
  • 400 Bad Request
    • 该状态码表示请求报文中存在语法错误
  • 401 Unauthorized
    • 该状态码表示发送的请求需要有通过 HTTP 认证
  • 403 Forbidden
    • 该状态码表明对请求资源的访问被服务器拒绝了
  • 404 Not Found
    • 表示资源不存在
  • 500 Internal Server Error
    • 该状态码表明服务器端在执行请求时发生了错误
  • 503 Service Unavailable
    • 该状态码表明服务器暂时处于超负载或正在进行停机维护