这是我参与「第四届青训营 」笔记创作活动的第7天
初始HTTP
什么是HTTP
- 超文本传输协议(Hyper Text Transfer Protocol)
- 应用层协议,基于TCP协议
- 请求响应
- 简单可扩展
- 无状态
协议分析
协议分析-报文
HTTP/1.1
-
request
起始行:method 目标地址 协议版本
请求行
请求体
-
response
响应行:协议版本 状态码
响应头
响应体
method:
状态码:
常用请求头
RESTful API
常用响应头
缓存
缓存请求路径
cookie
发展:HTTP2
- 概述:更快、更稳定、更简单
- 最小单位:帧(frame) ——HTTP/2通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧四朴树的数据流
- 二进制
- 消息:与逻辑请求或响应消息对应的完整的一系列帧
- 数据流:已建立的连接内的双向字节流,可以承载一条或多条消息
- 交错发送,接收方重组织
- HTTP/2连接都是永久的,而且仅需要每个来源一个连接
- 流控制:阻止发送方向接收方发送大量数据的机制
- 服务器推送
发展:HTTPS概述
-
HTTPS:Hypertext Transfer Protocol Secure
-
经过TSL/SSL加密
-
对称加密:加密和解密都是使用同一个密钥
-
非对称加密:加密和解密需要使用两个不同的密钥
- 公钥(public key)
- 私钥(private key)
-
HTTP与HTTPS的区别
- HTTP:HTTP,TCP,IP
- HTTPS:HTTP,SSL or TLS ,TCP,IP
HTTP 特点
HTTP 的特点概括如下:
- 灵活可扩展,主要体现在两个方面。一个是语义上的自由,只规定了基本格式,比如空格分隔单词,换行分隔字段,其他的各个部分都没有严格的语法限制。另一个是传输形式的多样性,不仅仅可以传输文本,还能传输图片、视频等任意数据,非常方便。
- 可靠传输。HTTP 基于 TCP/IP,因此把这一特性继承了下来。这属于 TCP 的特性,不具体介绍了。
- 请求-应答。也就是
一发一收、有来有回, 当然这个请求方和应答方不单单指客户端和服务器之间,如果某台服务器作为代理来连接后端的服务端,那么这台服务器也会扮演请求方的角色。 - 无状态。这里的状态是指通信过程的上下文信息,而每次 http 请求都是独立、无关的,默认不需要保留状态信息。
HTTP 缺点
无状态
所谓的优点和缺点还是要分场景来看的,对于 HTTP 而言,最具争议的地方在于它的无状态。
在需要长连接的场景中,需要保存大量的上下文信息,以免传输大量重复的信息,那么这时候无状态就是 http 的缺点了。
但与此同时,另外一些应用仅仅只是为了获取一些数据,不需要保存连接上下文信息,无状态反而减少了网络开销,成为了 http 的优点。
明文传输
即协议里的报文(主要指的是头部)不使用二进制数据,而是文本形式。
这当然对于调试提供了便利,但同时也让 HTTP 的报文信息暴露给了外界,给攻击者也提供了便利。WIFI陷阱就是利用 HTTP 明文传输的缺点,诱导你连上热点,然后疯狂抓你所有的流量,从而拿到你的敏感信息。
队头阻塞问题
当 http 开启长连接时,共用一个 TCP 连接,同一时刻只能处理一个请求,那么当前请求耗时过长的情况下,其它的请求只能处于阻塞状态,也就是著名的队头阻塞问题。接下来会有一小节讨论这个问题。