这是我参与「第五届青训营」伴学笔记创作活动的第 22 天
一、本堂课重点内容
- 初识HTTP协议
- 协议分析
二、详细知识点介绍
1.初识HTTP协议
1.1 前置知识
我们在上网时,经常会查询各种网址,那么在我们输入网址点击搜索,到页面加载完成这一过程中,到底发生了什么呢?这个过程中,HTTP的作用是巨大的,在了解位于应用层的协议HTTP之前,我们先来了解位于传输层的协议TCP。 TCP协议有一些特点,下面进行总结:
- 面向连接
- 点对点
- 可靠交付
- 面向字节流,也就是说仅仅把上层协议传递过来的数据当成字节传输。为了实现TCP上述的特点,TCP协议需要解决的是面向连接(建立连接和关闭连接的方式)、可靠传输(错误确认和重传)、 流量控制(发送方和接收方的传输速率协调)、拥塞控制四个方面。
1.2 HTTP简介
HTTP(Hyper Text Transfer Protocol)称为超文本传输协议,是一个应用层协议,并且基于上面提到的TCP协议,拥有着请求响应、简单可扩展、无状态等特点。
2.协议分析
2.1 协议发展阶段
HTTP协议发展至今经历了几个阶段:
- HTTP/0.9:单行协议,请求GET/mypage.html,响应只有HTML文档。
- HTTP/1.0:构建可扩展性,增加了Header,有了状态码,支持多种文档类型。
- HTTP/1.1:标准化协议,链接复用,缓存,内容协商。
- HTTP/2:更优异的表现,二进制协议,压缩header,服务器推送。
- HTTP/3:草案
2.2 协议报文
2.2.1 Method
HTTP协议中,报文是十分重要的部分,在报文中存在着方法(method),常见的方法如下所示:
方法也有安全方法和幂等的分类,具体特性如下:
Safe (安全的) :不会修改服务器的数据的方法,如GET,HEAD,OPTIONS等方法。
ldempotent (幂等) :同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的,且所有safe的方法都是Idempotent的,如GET,HEAD,OPTIONS,PUT, DELETE等方法。
2.2.2 状态码
状态码也是协议报文中重要的一部分,常见的状态码如下所示:
具体范例如:
- 200 OK-客户端请求成功
- 301-资源(网页等)被永久转移到其它URL
- 302-临时跳转
- 401 Unauthorized-请求未经授权
- 404-请求资源不存在,可能是输入了错误的URL
- 500-服务器内部发生了不可预期的错误
- 504 Gateway Timeout-网关或者代理的服务器无法在规定的时间内获得想要的响应
2.2.3 RESTful API
RESTful API: 一种API设计风格; REST - Representational State Transfer,设计这种API应遵循以下几个原则:
- 每一个URI代表一种资源;
- 客户端和服务器之间,传递这种资源的某种表现层;
- 客户端通过HTTP method, 对服务器端资源进行操作,实现"表现层状态转化"。
2.2.4 请求和响应
回到报文本身,报文的头部字段通常由请求头和响应头两种,它拥有很多请求头和响应头,一些常用样例如下:
常见请求头
常见响应头
2.2.5 缓存
HTTP中缓存分为强缓存和协商缓存。
强缓存:当请求资源在本地缓存时即可直接响应并使用。
协商缓存:即使请求资源在本地已有缓存,但是否能使用需要一个通信过程来进行确认。
强缓存和协商缓存都各自有一些字段
强缓存字段:
- Expires,时间戳
- Cache-Control
- 可缓存性
- no-cache:协商缓存验证
- no-store: 不使用任何缓存
- 可缓存性
- 到期
- max-age:单位是秒,存储的最大周期,相对于请求的时间
- 重新验证,重新加载
- must-revalidate: 一旦资源过期,在成功向原始服务器验证之前,不能使用
协商缓存字段:
- Etag/lf-None-Match:资源的特定版本的标识符,类似于指纹
- Last-Modified/Ilf-Modified-Since:最后修改时间
HTTP协议请求资源的流程图如下所示:
3. 发展
3.1 HTTP/2概述
HTTP/2是现在被广泛使用的协议版本,有着更快、更稳定、更简单的特点。在HTTP/2协议中有以下概念:
帧(frame) : HTTP/2通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流,且为二进制数据流
消息 :与逻辑请求或响应消息对应的完整的一系列帧。
数据流 :已建立的连接内的双向字节流,可以承载一条或多条消息。HTTP/2连接都是永久的,而且仅需要每个来源一个连接,采取交错发送和接收方重组织的方法。
流控制 :阻止发送方向接收方发送大量数据的机制,采取服务器推送的方式。
3.2 HTTPS概述
HTTPS(Hypertext Transfer Protocol Secure)经过TSL/SSL加密。加密方式又有对称加密和非对称加密:
对称加密: 加密和解密都是使用同一个密钥
非对称加密: 加密和解密需要使用两个不同的密钥:公钥(public key)和私钥(private key)
三、课后个人总结
在HTTP协议的学习中,扩展了关于应用层协议的知识内容,HTTP协议在日常生活中不可或缺,在课堂上学习到了有关HTTP的发展、协议报文等一系列内容,并且熟悉了通过底层看表面这一研究思路。