https://blog.csdn.net/qq_28849965/article/details/85126787

HTTP 是什么?

官方点的定义是:一种网络传输协议,位于 TCP / IP 协议族的最顶层——应用层。

可能这么还是理解不了,那我们来通俗一点看。

  • 两种最直观的印象
  1. 浏览器输入地址栏,打开网页
  2. Android中发送网络请求返回对应的内容
  • 全称 Hypertext Transfer Protocol,超文本传输协议

超文本

首先我们得知道什么是超文本,超文本就是 在电脑中显示的、含有可以指向其他文本的链接,同时包含这个链接的文本也叫做超文本,html就是一个超文本

那么我们直白点就可理解为:定义了一些规范来传输超文本,就是一个传输协议

HTTP 的工作方式

HTTP 的概念、原理、工作机制、数据格式 - 图1

浏览器:

用户输入地址后回车或点击链接 -> 浏览器拼装 HTTP 报文并发送请求给服务器 -> 服务器处理请求后
发送响应报文给浏览器 -> 浏览器解析响应报文并使用渲染引擎显示到界⾯。

手机 App:

用户点击或界面自动触发联网需求 -> Android 代码调用拼装 HTTP 报文并发送请求到服务器 -> 服务
器处理请求后发送响应报文给手机 -> Android 代码处理响应报文并作出相应处理(如储存数据、加工
数据、显示数据到界面)

我们可以看到关键的东西就是3个用户输入的URL、用于发送请求的请求报文、服务器响应的响应报文,接下来我们看这三个东西大概是什么样子的

URL 和 HTTP 报文

URL 格式分为三部分分别是:

协议类型、服务器地址(和端口号)、路路径(Path)
协议类型://服务器地址[:端口号]路径 比如:https://github/GuZhC

请求报⽂

HTTP 的概念、原理、工作机制、数据格式 - 图2

响应报⽂

HTTP 的概念、原理、工作机制、数据格式 - 图3

呕!!是不是想吐…. 不用急、不用怕下面我们一点一点的慢慢看

Request Method 请求方法

请求方法会有多个,有如下几个:

GET
用于获取资源
对服务器数据不不进行修改
不发送 Body

HTTP 的概念、原理、工作机制、数据格式 - 图4

对应 Retrofit 的代码:

HTTP 的概念、原理、工作机制、数据格式 - 图5

POST
用于增加或修改资源
发送给服务器的内容写在 Body 里面

HTTP 的概念、原理、工作机制、数据格式 - 图6

对应 Retrofit 的代码:

HTTP 的概念、原理、工作机制、数据格式 - 图7

PUT
用于修改资源
发送给服务器的内容写在 Body 里面

HTTP 的概念、原理、工作机制、数据格式 - 图8

对应 Retrofit 的代码:

HTTP 的概念、原理、工作机制、数据格式 - 图9

DELETE
用于删除资源
不发送 Body

HTTP 的概念、原理、工作机制、数据格式 - 图10

HTTP 的概念、原理、工作机制、数据格式 - 图11

HEAD
和 GET 使用方法完全相同
和 GET 唯一区别在于,返回的响应中没有 Body

Status Code 状态码

三位数字,用于对响应结果做出类型化描述(如「获取成功」「内容未找到」)。
1xx:临时性消息。如:100 (继续发送)、101(正在切换协议)
2xx:成功。最典型的是 200(OK)、201(创建成功)。
3xx:重定向。如 301(永久移动)、302(暂时移动)、304(内容未改变)。
4xx:客户端错误。如 400(客户端请求错误)、401(认证失败)、403(被禁止)、404(找
不到内容)。
5xx:服务器错误。如 500(服务器内部错误)。

Header ⾸部

作用:HTTP 消息的 metadata。

Host
目标主机。注意:不是在网络上用于寻址的,而是在目标服务器上用于定位子服务器的。

Content-Type
指定 Body 的类型。主要有四类:

\1. text/html
请求 Web 页面是返回响应的类型,Body 中返回 html 文本。格式如下:

HTTP 的概念、原理、工作机制、数据格式 - 图12

\2. x-www-form-urlencoded
Web 页面纯文本表单的提交方式。

HTTP 的概念、原理、工作机制、数据格式 - 图13

\3. multitype/form-data
Web 页面含有二进制文件时的提交方式。

HTTP 的概念、原理、工作机制、数据格式 - 图14

\4. application/json , image/jpeg , application/zip …
单项内容(文本或非文本都可以),用于 Web Api 的响应或者 POST / PUT 的请求

HTTP 的概念、原理、工作机制、数据格式 - 图15

Content-Length
指定 Body 的长度(字节)。

Transfer: chunked (分块传输编码 Chunked Transfer Encoding)
用于当响应发起时,内容长度还没能确定的情况下。和 Content-Length 不同时使⽤用。用途是尽早给
出响应,减少用户等待。

格式:

HTTP 的概念、原理、工作机制、数据格式 - 图16

Location
指定重定向的目标 URL

User-Agent
用户代理,即是谁实际发送请求、接受响应的,例如手机浏览器、某款手机 App。

Range / Accept-Range
按范围取数据

Accept-Range: bytes 响应报⽂文中出现,表示服务器支持按字节来取范围数据
Range: bytes=- 请求报文中出现,表示要取哪段数据
Content-Range:-/total 响应报文中出现,表示发送的是哪段数据
作⽤:断点续传、多线程下载。

其他 Headers

Accept: 客户端能接受的数据类型。如 text/html
Accept-Charset: 客户端接受的字符集。如 utf-8
Accept-Encoding: 客户端接受的压缩编码类型。如 gzip
Content-Encoding:压缩类型。如 gzip

Cache
作⽤:在客户端或中间网络节点缓存数据,降低从服务器取数据的频率,以提高网络性能。

REST
REST 的定义众说纷纭,没有统⼀一答案。
扔物线的观点:REST HTTP 即正确使用 HTTP。包括:
使用资源的格式来定义 URL
规范地使用 method 来定义网络请求操作
规范地使用 status code 来表示响应状态
其他符合 HTTP 规范的设计准则

以上内容参考扔物线HencodePlus