HTTP 与 HTTPS
HTTP 是什么?
- 超文本传输协议
从网络传输超文本内容到本地浏览器的协议,保证高效准确的传送超文本内容
HTTPS 是什么?
在 HTTP 协议的基础上,添加 SSL/TLS 协议,让数据加密传输
SSL/TLS 是什么?
传输层安全协议
- 防止运输内容被篡改和偷窥
HTTP 的请求过程
- HTTP 1.0 中默认是短链接,通过 keep-alive 告诉服务器建立长连接
HTTP 1.1 中默认长连接,即 Connection: keep-alive
HTTP 1.1 和 HTTP 2.0的区别
区别一:多路复用
HTTP 1.1 不支持多路复用
- HTTP 2.0 支持多路复用
-
区别二:数据压缩
HTTP 1.1 不支持 header 数据的压缩,每次都需要重复发送
HTTP 2.0 支持 header 数据的压缩,,采用了 HPACK 头部压缩算法对 Header 进行压缩
区别三:服务器推送
HTTP 2.0 独有
- 当用户的浏览器和服务器在建立连接后,服务器主动将一些资源推送给浏览器并缓存起来的机制
有了缓存,当浏览器想要访问已缓存的资源的时候就可以直接从缓存中读取了
HTTP 和 HTTPS 的区别
HTTPS 需要到 CA 申请证书
- HTTP 运行在 TCP 上,传输的内容都是明文的
- HTTPS 运行在 SSL/TLS 上,而 SSL/TLS 运行在 TCP 上,传输的内容都是密文的
- 连接方式不同
- 运行端口不同,HTTP 是 80,HTTPS 是443
HTTPS 可以有效的防止运营商劫持,解决了防劫持的一个大问题
Session 与 Cookie
解决 HTTP 无状态的问题
Session、Cookie 就可以记录用户状态信息,解决无状态的问题
Session 的作用
数据保存在服务端
-
Cookie 的作用
数据保存在客户端(浏览器)
- 减轻服务器压力,但是安全性较低,容易进行 cookies 欺骗
- 浏览器在下次访问网页时会自动附带上它发送给服务器
- 服务器通过识别 Cookies 并鉴定出是哪个用户
-
Cookie 的种类
会话 Cookie:从打开浏览器到关闭浏览器理解成一个会话,会话 Cookie 的有效期仅在浏览器打开期间生效,它存储在浏览器内存中;关闭浏览器后再次打开浏览器访问相同的页面需要重新登录
持久 Cookie:它存在客户端本地硬盘中,不受浏览器关闭影响,关闭浏览器后再次打开浏览器访问相同的页面还能继续使用该 Cookie,无需再次登录,用于长久保持用户登录态
不同种类 Cookie 的使用场景
会话Cookie:信息敏感程度高的,如银行、机密信息、企业邮箱等网站
持久Cookie:可勾选自动登录、30天内自动登录的网站就是持久 Cookie
TCP/IP
IP 是什么?
网络层协议
- 计算机用来相互识别,进行通信的一种机制,每台计算机都有一个 IP 用来在 Internet 上标识这台计算机
-
TCP 是什么?
传输层协议
- 应用程序之间的通信协议
TCP 确保数据包以正确的次序到达,并且尝试确认数据包的内容没有改变
什么是 ARP 协议?
一种用以解析地址的协议,根据通信方的 IP 地址可以反查出对应的MAC地址
TCP/IP 是什么?
TCP 和 IP 两个协议在一起协同工作,有上下层次的关系
- TCP 负责将数据分割并装入 IP 包,IP 负责将包发送至接受者
UDP 和 TCP 的区别是什么?
| TCP | UDP | | —- | —- | | 面向连接 | 无连接,发送数据之前不需要建立连接 | | 提供可靠的服务 | 提供的服务不一定可靠 | | 面向字节流 | 面向报文 | | 拥塞控制 | 没有拥塞控制
对实时应用很有用,如实时视频会议,允许报文丢失的场景 | | 头部开销20-60个字节 | 头部开销小,只有 8 个字节 | | 全双工的可靠信道 | 不可靠信道 | | 先发送的数据先到达 | 不能保证先发送的数据先到达 |
HTTP、TCP 、IP 协议的关系
- HTTP 的长连接和短连接本质上是 TCP 长连接和短连接
- HTTP 是应用层协议,在传输层使用 TCP 协议,在网络层使用 IP 协议
- IP 协议主要解决网络路由和寻址的问题
- TCP 协议主要解决如何在 IP 层上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序和发送顺序一致
OSI 模型
OSI 的七层模型
- 假设是访问域名,DNS 会负责域名解析,返回服务器的IP地址
- 客户端访问服务器,与服务器通过三次握手建立连接
- 客户端发送一个 HTTP 请求给服务器,可能会经过安全层,网关层(比如 nginx 或者k8s 的 ingress),再到服务层
- 服务端收到 HTTP 请求后,处理请求
- 服务端返回响应内容
- 客户端收到响应内容,解析响应内容
- 客户端渲染响应内容
如果没有设置长连接,那么会四次挥手断连,HTTP1.1 默认有长连接
用 TCP/IP 四层模型解释发送 HTTP 请求的过程
客户端在应用层(http 协议)发送一个 http 请求
- 传输层(tcp 协议)将从应用层收到的数据(http 请求报文)进行分割,并在各个报文上打上序号和端口号再转发给网络层
- 网络层(ip 协议)将报文增加通信目的地的 MAC 地址后转发给链路层
-
TCP 三次握手流程
客户端请求服务器,询问服务器是否能收到客户端的请求
- 服务器响应客户端收到请求并同意连接,询问客户端是否能收到服务器的响应
当客户端收到服务端发来的连接同意应答后,向服务器确认已收到响应,开始建立连接
TCP 四次挥手流程
客户端向服务器发送断开连接的请求
- 服务器收到断开连接的请求只会回复客户端,表示已经收到断开请求
- 服务器在确认断开前,会先确认所有传输到客户端的数据是否已经传输完毕,确认数据传输完毕后才进行断开
- 客户端收到服务器发来的断开连接数据包后,回复服务器,表示收到了断开连接数据包
请求方法
常见的请求方法:get、post、delete、put、patch一个请求由什么组成?
- 请求行(General):包含请求类型、请求 url 等
- 请求头(Request Headers):Content-type、Cookie 等
请求数据(Request body):需要提交的数据,GET 请求则空
常见的 Content-type
text/html:HTML 格式
- application/json:序列化 JSON 数据
- application/x-www-form-urlencoded:表单数据
-
一个响应由什么组成?
响应状态码(Response Status Code)
- 响应头(Response Headers)
- 响应体(Response Body)
这部分详见HTTP报文详解
CDN
CDN 的作用
- 内容分发网络
- CDN 是构建在现实网络上的虚拟网络
- 主要是为了解决服务器地理位置、服务器稳定性而诞生的
- 依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能,使用户就近获取所需内容,降低网络拥塞,提高用户响应速度和命中率
-
CDN 的缓存机制
通过 CDN 的缓存机制,不同设备访问相同网站时,就可以直接通过 CDN 服务器的缓存拉取对应的网站文件
-
CDN 和 DNS 的关系
浏览器发送 DNS 查询请求到 DNS 服务器
- DNS 服务器会返回 CDN 专用的处理 DNS 请求的 DNS 服务器的 IP 地址给到浏览器
- 浏览器访问 CDN 专用的 DNS 服务器,DNS 服务器返回 CDN 负载均衡服务器的 IP 地址
- 浏览器访问 CDN 负载均衡服务器,根据用户的网络状态,在 CDN网络中返回最适合的 CDN 服务器的 IP 地址
CDN 访问数据的流程
- 浏览器拿到 CDN 服务器的 IP 地址之后,就会访问它
- 假设第一个 CDN 服务器没有需要的网站文件(缓存中没有),就会去 CDN 网络中的上层 CDN 服务器中拉取
- 如果上层 CDN 服务器没有还会继续往上层找
- 如果所有上层 CDN 服务器都没有找到,就会去源站中拉取
- 拉取成功之后,就会在刚刚经过的所有 CDN 服务器中缓存这些网站文件
- 最后第一个 CDN 服务器会将网络文件发送给浏览器
