HTTP实用指南|青训营笔记

98 阅读4分钟

HTTP实用指南|青训营笔记

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

初识HTTP

什么是HTTP

  • 超文本传输协议
  • 应用层协议,基于TCP协议
  • 请求与响应
  • 简单可扩展
  • 无状态

HTTP工作方式

  • 客户端向服务端发送一段请求报文,服务端收到后,返回响应报文,客户端对响应内容渲染后进行展示

对于HTTP是一种无状态连接的理解

  • 无状态与无连接

    • 无连接

    每次连接只处理一个请求,服务端处理完客户端一次请求,等到客户端作出回应之后便断开连接;无连接的维度是连接

    • 无状态

    是指服务端对于客户端每次发送的请求都认为它是一个新的请求,上一次会话和下一次会话没有联系;无状态的维度是请求

    • 持久连接

    持久连接,本质上是客户端与服务器通信的时候,建立一个持久化的TCP连接,这个连接不会随着请求结束而关闭,通常会保持连接一段时间。

  • http是基于tcp的,而从http1.1开始默认使用持久连接;在这个连接过程中,客户端可以向服务端发送多次请求,但是各个请求之间的并没有什么联系;

协议分析

报文是什么

  • 报文是在 HTTP 应用程序之间发送的数据块。这些数据块以一些文本的元信息 (meta 标签中的信息) 开头,描述了报文的内容及含义。
  • 由 3 部分组成:对报文进行描述的「起始行」、包含属性的「首部(Header)  」以及可选的、包含数据的「主体(body)  」

image.png

报文格式

  • 请求报文格式
<method> <path> <HTTP version>//起始行
<headers>//首部

<entity-body>//主体
复制代码
  • 响应报文格式
<HTTP version> <status code> <reason-phrase>
<headers>

<entity-body>
复制代码
  • 各部分介绍:
  • 方法 (method) 客户端希望服务器对资源执行的动作,常见的方法有 Get、Post、HEAD 等。
  • 请求路径 (path) 请求的 URL 描述了要对哪个资源执行这个方法,是给服务器看的。
  • HTTP 版本(HTTP version)
  • 状态码(status code) 不同状态码对应不同的响应状态
  • 原因短句(reason-phrase) 对状态码进行简单的描述。
  • 首部(headers) 包含许多键值对,是对响应数据的一些格式信息。

Method(请求方法)

Get

  • 最常见的请求方式
  • 指定请求路径,向服务器请求资源
  • 只获取资源,不对服务器数据进行修改
  • 不发送 body

Post

  • 用户增加或者修改资源
  • 包含 body,发送给服务器的内容写在 body 里面

Put

  • 用于修改资源
  • 包含 body,发送给服务器的内容写在 body 里面

DELETE

  • 用于删除资源
  • 不发送 body

HEAD

  • HEAD 与GET的使用方式完全相同。
  • 区别在于HEAD 请求的返回响应中没有Body
  • 用途:比如下载需求,返回的 Headers 中有下载内容的大小,可以用于显示进度。

分类

  • safe:安全的,不会修改服务器的数据的方法 如:GET,HEAD,OPTIONS
  • 幂等的: 同样的请求被执行一次或多次,效果是一样的,服务器的状态也是一样的,所有的safe方法都是幂等的

状态码

  • 状态码是对结果进行类型化的描述的,比如「请求成功」、「内容未找到」等。 主要分为 5 类。

  • 1xx:指示信息,表示请求已接收,正在处理

  • 2xx:成功,表示指示已被成功接收

    • 200 OK:客户端请求成功
  • 3xx:重定向,要完成请求必须进行进一步操作

    • 302:重新跳转
  • 4xx:客户端错误

    • 404:请求资源不存在
  • 5xx:服务器错误

头部

  • 首部包含多个请求头,是用来描述消息的元数据(meta data)。
  • 通用首部 => 提供了与报文相关的最基本的信息
  • 请求首部 => 只在请求报文中有意义的首部
  • 响应首部 => 只在响应报文中有意义的首部
  • body 首部 => 描述 body 的首部

cookie

详细cookie知识参考本文章: 聊一聊session和cookie

发展

HTTP/2概述(更快,更稳定,更安全)

  • 帧(Frame):HTTP/2的最小通信单位,每个帧都包含帧头,至少也会标识出当前帧所在的数据流

  • 消息:与逻辑请求或响应消息对应的完整的一系列帧

  • 数据流:已建立的连接内的双向字节流

  • HTTP/2的特点

    • 连接都是永久的,且仅需要每个来源一个链接
    • 流控制:阻止发送方向接收方发送大量数据的机制
    • 服务器主动推送
  • HTTPS:

    • 在HTTP的基础上,经过TSL/SSL加密

参考资料