初识HTTP
什么是HTTP
HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol)
- 应用层协议,基于TCP协议
- 请求 响应
- 简单可扩展
- 无状态,每一个请求是孤立的
发展过程
报文分析
⭐️HTTP协议组成:
- 起始行(start line):描述请求或响应的基本信息
- 头部字段(header):使用key-vaule形式更详细的说明报文
- 消息正文(entity):实际传输的数据,它不一定是纯文本
复制代码
HTTP协议规定每次发送的报文必须有Header,但可以没有body,而且在header和body中必须有一个空行。
图示大概是这样:
每个报文的起始行都是由三个字符组成:
- 方法(Method)
- URL字段
- HTTP版本字段
Method
⭐️Method根据特点重新分类:
Safe(安全的):不会修改服务器的数据方法
GET HEAD OPTIONS
Idempotent(幂等):同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的,所有safe 的方法都是Idempotent的
GET HEAD OPTIONS PUT DELETE
复制代码
?状态码
状态码能看出资源请求的结果,常见的状态码:
请求头(Header)
起始行和头部并为请求头或响应头
常用请求头:
常用响应头:
缓存
缓存分为强缓存和协商缓存:
浏览器查看更新缓存过程:
cookie
cookie帮我们增强了一些跟状态相关的特性
Set-Cookie – response:
cookie一般以键值对存在,设置时要注意
?HTTP/2概述
HTTP/2引入二进制数据帧和流的概念,更快、更稳定、更简单
- 帧(frame):HTTP/2通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流
- 数据流:已建立的连接内的双向字节流,可以承载一条或多条消息
– HTTP/2 连接都是永久的,而且仅需要每个来源一个连接
– 流控制:组织发送方向接收方发送大量数据的机制
⭐️帧对数据进行顺序标识,浏览器收到数据后安装序列对数据进行合并,不会出现合并后数据错乱的情况,有了序列,服务器就可以并行数据传输。
HTTP的优缺点
HTTP优点
- 简单、灵活、易于扩展
- 应用广泛、环境成熟
- 无状态
既是是优点也是缺点,因为服务器没有记忆功能,不需要额外的资源来记录状态信息,实现简单,减轻服务器负担,能把更多的CPU和内存用来对外提供服务
HTTP缺点
-
无状态
既然服务器没有记忆功能,无法支持需要连续多个步骤的实务操作。由此出现cookie技术 -
明文不安全
HTTP协议可以被监听和被窥探,无法判断双方身份,不能判断报文是否被更改过
HTTPS概述
?什么是HTTPS
- HTTPS
Hypertext Transfer Protocol Secure
,它用来在计算机网络上的两个端系统之间进行安全的交换信息(secure communication)
- 经过TSL/SSL加密
⭐️相当于:HTTP+SSL(TLS)=HTTPS
HTTPS的一些特性:
- 可靠性:加密
- 完整性:MAC验证
- 不可抵赖性:数字签名
?TSL/SSL
TSL是SSL的后续版本,用于在互联网两台计算机之间用于身份验证和加密的一种协议。位于会话层
加密
TSL在根本上使用使用对称加密
和非对称加密
:
- 对称加密
加密和解密都是使用同一个密钥 - 非对称加密
加密和解密需要使用两个不同的密钥:公钥(public key)
和私钥(private key)
完整性-MAC验证
MAC 的全称是message authentication code
,它通过 MAC 算法从消息和密钥生成,MAC 值允许验证者(也拥有秘密密钥)检测到消息内容的任何更改,从而保护了消息的数据完整性。
不可抵赖性-数字签名
私钥(private key)——加密
公钥(public key)——解密
数字签名在HTTPS中的工作:
⭐️!当签名算法不够健壮,签名算法被暴力破解,中间人会攻击
?HTTPS到底做了什么?
HTTPS协议提供了三个关键的指标
加密(ENCRYPTION)
HTTPS通过对数据加密来使其免受窃听者对数据的监听数据一致性(Data integrity)
数据在传输过程中不会被窃听者所修改,用户发送的数据会完整的发送到服务端身份验证(Authentication)
可以确认对方真实身份,防止中间人攻击并建立用户信任
HTTP Strict-Transport-Security(HSTS)
将HTTP主动升级到HTTPS:
必须现有HTTPS才有HSTS!
最后
本学习笔记介绍了HTTP的发展过程和一些有关知识点,以及HTTPS的产生与一些特性。标记了一些重点部分。
如有错误,欢迎指正~!