前言
超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在 TCP 之上,因为不会存储用户信息,所以是一种无状态协议。
报文格式
- 起始行:描述请求或响应的基本信息
- 头部字段集合:使用 key-value 的形式更详细地说明报文
- 空行
- 消息正文:实际传输的数据
请求报文起始行
- 请求方法:如 GET/POST 等,表示对资源的操作
- 请求目标:通常是一个 url ,标记了请求方法要操作的资源
- 版本号:表示报文使用的 HTTP 协议版本
响应报文起始行
- 版本号:表示报文使用的 HTTP 协议版本
- 状态码:由三个十进制数字组成,第一个十进制数字定义了状态码的类型。响应分为五类:信息响应(100–199),成功响应(200–299),重定向(300–399),客户端错误(400–499)和服务器错误 (500–599)
- 原因:状态码的补充说明
一个 HTTP 请求的发出
- 浏览器拿到 url
- 解析 IP 地址
- 从 url 中解析出域名并以此检查缓存中有没有对应域名的 IP
- 如果有访问过,则浏览器会缓存对应的域名和 IP 信息
- 如果没有访问过,或很久以前访问过,检查时间已经超时了,就会查找本机的域名解析文件(/etc/hosts)
- 如果仍未获取成功,则会发起 DNS 请求获取 IP
- 网络请求
- TCP 三次握手
- 浏览器发起 HTTP 请求
- 服务器响应 HTTP
- 浏览器解析响应报文
- TCP 四次挥手
HTTPS
由于 HTTP 天生明文不安全,所以需要对其进行加密,故产生了 HTTPS
使用 HTTPS ,则所有的 HTTP 请求和响应在发送到网络之前,都要进行加密