概述
超文本传输协议(Hyper Text Transfer Protocol,HTTP)
- HTTP 是客户端与服务端通信必须遵守的传输协议
- 客户端要以 HTTP 协议要求的格式把数据提交到服务器
- 服务器要以 HTTP 协议要求的格式把数据响应给客户端
发展
HTTP/0.9
需求是仅用于传输简单的 HTML 文件
请求过程
- 根据 IP 地址、端口和服务器建立 TCP 连接 — 三次握手
- 使用 GET 方法向服务器发送请求
- 服务器收到请求后,以ASCII字符流的形式响应给客户端
- 文档传输完后,连接断开 — 四次挥手
特点
- 仅用来传输体积较小的 HTML 文件
- 请求没有请求头和请求体,只有一个请求行
- 响应没有响应头,只有响应体
HTTP/1.1
为了适应传输多种格式文件的需要
HTTP/1.0 增加了请求头和响应头,以键值对形式保存
HTTP/1.1 增加了对持久连接、cookie 等技术的支持
需要解决的问题
- 浏览器需要知道返回的数据的类型,才能对不同文件进行针对性处理
- 浏览器还需要知道需要提供的语言版本
- 浏览器还需要知道文件的编码类型
针对上述问题对请求和响应作出改进
请求
客户端发送给服务器的消息,称 HTTP 请求消息,又称 HTTP 请求报文
报文由请求行、请求头、请求体三部分组成

请求行
由请求方式、URL、协议版本三个部分组成

图中的请求方式是 GET,URL 是 /api/getbooks,协议版本是 HTTP/1.1
请求头
用于描述客户端基本信息,从而把客户端信息告知服务器
由多个键值对组成

- 各字段含义
| 头部字段 | 说明 |
|---|---|
| Host | 要请求的服务器域名 |
| Connection | 客户端与服务器的连接方式( close 或 keepalive ) |
| Content-Length | 用来描述请求体的大小 |
| Accept | 客户端可识别的响应内容类型列表 |
| User-Agent | 产生请求的浏览器类型 |
| Content-Type | 客户端告诉服务器实际发送的数据类型 |
| Accept-Encoding | 客户端可接收的内容压缩编码形式 |
| Accept-Language | 用户期望获得的自然语言的优先顺序 |
空行
位于最后一个请求头字段后,通知服务器 请求头至此结束
请求体
存放的是需通过 POST 方式 提交到服务器的数据
只有 POST 请求才有了请求体,GET 请求没有请求体
响应
响应消息就是服务器响应给服务端的消息内容,也称响应报文

状态行
由 HTTP 协议版本、状态码、状态码描述文本三部分组成,由空格隔开
如图协议版本为 HTTP/1.1 状态码为 200 状态码描述文本为 OK
请求头
描述服务器的基本信息,由 键值对 组成
| 头部字段 | 说明 |
|---|---|
| Access-Control-Allow-Origin | 是否可以跨域共享 |
| Content-Type | 当前内容的 MIME 类型 |
| Content-Length | 响应体的长度 |
| Content-Language | 响应体所使用的语言 |
| Date | 词条消息被推送的日期和事件 |
| Connection | 用于指示链接建立完成后,会不会断开 |
| ETag | 对于某个资源的特定版本的标识符,通常是一个消息队列 |
空行
最后一个响应头字段结束,紧跟一空行,表示响应头至此结束
响应体
服务器响应给客户端的资源内容
请求方法
用于表明要对服务器上资源进行的操作,常用的是 GET 和 POST
| 序号 | 方法 | 描述 |
|---|---|---|
| 1 | GET | (查询) 发送请求来获得服务器上的资源,请求体中不会包含请求数据,请求数据放在协议头中。 |
| 2 | POST | (新增) 向服务器提交资源(例如提交表单或上传文件)。数据被包含在请求体中提交给服务器。 |
| 3 | PUT | (修改) 向服务器提交资源,并使用提交的新资源,替换掉服务器对应的旧资源。 |
| 4 | DELETE | (删除) 请求服务器删除指定的资源。 |
| 5 | HEAD | HEAD 方法请求一个与 GET 请求的响应相同的响应,但没有响应体。 |
| 6 | OPTIONS | 获取 http 服务器支持的 http 请求方法,允许客户端查看服务器的性能,比如 ajax 跨域时的预检等。 |
| 7 | CONNECT | 建立一个到由目标资源标识的服务器的隧道。 |
| 8 | TRACE | 沿着到目标资源的路径执行一个消息环回测试,主要用于测试或诊断。 |
| 9 | PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
响应状态码
HTTP Status Code 属于 HTTP 协议的一部分,用于标识响应的状态
位于响应的状态行中返回给浏览器
| 分类 | 分类描述 |
|---|---|
| 1** | 信息,服务器收到请求,需要请求者继续执行操作(实际开发中很少遇到 1** 类型的状态码) |
| 2** | 成功,操作被成功接收并处理 |
| 3** | 重定向,需要进一步的操作以完成请求 |
| 4** | 客户端错误,请求包含语法错误或无法完成请求 |
| 5** | 服务器错误,服务器在处理请求的过程中发生了错误 |

本文详细介绍了HTTP的发展历程,从最初的HTTP/0.9到HTTP/1.1的主要变化。HTTP/0.9仅用于传输简单HTML,而HTTP/1.1增加了请求头、响应头、持久连接等功能,以适应更复杂的网络交互需求。HTTP请求由请求行、请求头和请求体组成,响应包括状态行、响应头和响应体。HTTP方法包括GET、POST等,用于不同的资源操作。HTTP状态码则标识了请求处理的结果。

16万+

被折叠的 条评论
为什么被折叠?



