HTTP 基础回顾
相信作为 WEB 开发的一员,对 HTTP 应该都不陌生吧!当 Client 需要与 Server 通信的时候,大多数情况都是采用的 HTTP 协议,这是我们日常开发中都会接触到的吧,但是你真的了解 HTTP 吗?接下来我们一起来回顾下 HTTP 吧!如果有理解的错误的地方,希望在下面留言指正,谢谢!
1. 什么是 HTTP ?
什么是 HTTP 呢?可以一句话概括:超文本传输协议。那什么叫 ”超文本传输协议“ 呢?
- 超文本:文本、图片、视频、音频等…
- 传输:两个或以上节点(电脑)进行传递数据
- 协议:在计算机世界里,用机器能懂的语言进行规则的约定
简单来说:HTTP 是 两个或以上节点传输文本、图片、视频等超文本的一种协议。
而且 HTTP 是位于应用层的无状态的一种通信协议,它不会对发送过的请求和响应做持久化,于是后面引入了 Cookie 技术等。
2. HTTP 的发展
HTTP 于 1990 年问世,最早的版本叫 HTTP/0.9,至今已经更新到 HTTP/2.0 了。因为 HTTP/2.0 只支持 HTTPS 以及现在大多数浏览器还不支持的原因,普遍还是采用 HTTP/1.1 进行默认通信。
3. HTTP 版本对比
接下来我们将对各版本的一个特性进行实验分析。
3.1、HTTP/0.9
HTTP 最早的雏形版本。有如下特性:
- 只支持简单的 GET 请求
- 不支持协议头
- 只支持纯文本
- 采用短连接方式
构造一个请求:
3.2 、HTTP/1.0
HTTP/1.0 是第二个版本,需要在请求行中指定版本号。相对于上个版本增加了几个特性:
- 支持”请求头部“字段和“响应头部字段”
- 增加了响应行
- 不局限于纯文本,支持图片、视频等
- 开始支持 POST、PUT、HEAD、DELETE 等请求方法
- 支持长连接(默认还是短连接,需通过设置请求头:Connection: Keep-Alive 实现长连接)
构造一个请求:
请求头一定要设置 Host 字段,防止同一个远程服务器有多个虚拟站点
3.3、HTTP/1.1
这个版本又增加了什么特性呢?
Pipelining
可以一次传送多个 HTTP 请求,之前的版本每次只能发送一个请求,必须等请求响应后才能发起下一个请求。
Persist Connection
持久连接,默认支持持久连接。响应结束后不会立马关闭与远程主机的连接,可通过 WEB Servcer 服务器设置断开的时间和是否启动持久连接。
Cache Controller
缓存控制,可通过加入请求头来控制缓存,例如:Cache-Control: no-cache 等。
构造一个请求:
3.4、HTTP/2.0
HTTP/2.0 要基于 HTTPS 才可以实现,增加了以下特性:
Binary Protocol
将请求头以二进制的的形式进行传输,提高传输速度。
Multiplexing
多工传输。上一个版本虽然可以同时发起多个请求,但是响应的时候需按顺序,这样会降低效率,现在顺序可以无序返回。
Header Compression
因为之前的版本请求头会有重复的情况,所以 Header Compression 可以对这种情况进行压缩,提高传输效率。
Server Push
服务器可以将主动的推送客户端可能需要的资源,无须每次都由客户端主动发起请求。
4. 状态码
4.1、类别
类别 | 原因短语 | |
---|---|---|
1XX | Informational(信息性状态码) | 接收的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |
4.2、常用状态码
4.2.1、2XX
状态码 | 原因短语 | 描述 |
---|---|---|
200 | OK | 请求正常处理 |
204 | No Content | 请求成功,无资源返回 |
206 | Partial Content | 请求成功,范围请求 |
4.2.2 、3XX
状态码 | 原因短语 | 描述 |
---|---|---|
301 | Moved Permanently | 永久重定向 |
302 | Found | 临时重定向 |
303 | See Other | 与 302 有相同的功能,但是要求客户端用 GET 请求资源 |
304 | Not Modified | 附带请求条件不符合 |
4.2.3、4XX
状态码 | 原因短语 | 描述 |
---|---|---|
400 | Bad Request | 表示请求报文中存在语法错误 |
401 | Unauthorized | 表示需要进行 HTTP 认证 |
403 | Forbidden | 请求被服务器拒绝 |
404 | Not Found | 请求的资源不存在 |
4.2.4、5XX
状态码 | 原因短语 | 描述 |
---|---|---|
500 | Internal Server Error | 服务器内部发生错误 |
502 | Bad Gateway | 网关错误 |
503 | Service Unavailable | 服务器超负载或停机维护 |
以上就是简单的总结,希望能帮助到阅览的您。