浏览器输入URL之后发生的过程
- 浏览器解析URL中的协议,主机,端口,路径参数等
- DNS域名解析得到对应的IP地址
- 通过IP和PORT对服务器发送TCP三次握手建立连接
- 浏览器发送请求
- 服务器接受请求,处理并响应
- 浏览器得到HTTP响应,对响应报文指定的格式进行渲染
- 浏览器和服务器四次挥手断开连接
DNS解析过程(全称为域名系统(Domain Name System))
-
浏览器缓存
-
host文件(
/etc/hosts
目录下)如下
127.0.0.1 localhost
::1 localhost将 example.com 指向本地回环地址
127.0.0.1 example.com
-
本地DNS服务器(如:中国移动)
-
根域名服务器===》顶级域名服务器(如.com .net .cn)
-
顶级域名服务器==》权威域名服务器(如:baidu.com)
-
权威域名服务器==》IP地址
HTTP版本
1、0.9:
- 无报头,只支持GET方法,响应只能是HTML
2、1.0
- 有报头,支持GET,POST等多种方法,支持多种状态码
- 不支持长连接
3、1.1
- 长连接
- 管道网络通信(服务器必须按照发送顺序处理,造成队头阻塞)
缺点:
- 队头阻塞
- 头部冗余(http2解决)
- 无请求级别
- 请求响应一对一,服务器被动(http2解决)
4、2.0
- 二进制数据传输
- stream并发传输(乱序发送,在客户端通过ID组装)
- 头部压缩
- 一个请求可对应多个响应(服务器推送)
基于TCP连接的缺点:
- 队头阻塞(TCP连接)
- TCP和TLS的握手延迟
- 网络迁移重连
5、3.0
使用QUIC协议解决TCP的缺点
HTTPS的执行流程
- 客户端发送加密请求
- 服务器产生一对公钥和私钥,将自己的公钥发给CA证书机构,CA机关使用自己的私钥加密,产生CA证书
- 服务端响应客户端请求,发送CA机关的数字证书给客户端
- 客户端解析数字证书(浏览器保存有CA机关公钥),验证是否合法
- 客户端随机生成一个数给服务端Key
- 客户端对Key使用服务端的公钥加密,发送给服务端作为对称加密的密钥
- 服务端对收到的请求使用自己的私钥解析,得到对称加密的密钥
- 之后服务端和客户端之间通过Key加密通信
中间人攻击
-
客户端发送加密请求
-
中间人捕获请求,将请求转发给服务器
-
中间人得到服务器的公钥,自己生成一对公钥和私钥,将自己的公钥发送给客户端