# 六.网络相关
# 1.OSI 七层模型
模型 | 概述 |
---|---|
物理层 | 网络连接介质 |
数据链路层 | 数据链路层将比特封装成数据帧并传递 |
网路层 | 定义 IP 地址,定义路由功能,建立主机到主机的通信 |
传输层 | 负责将数据进行可靠或者不可靠传递,建立端口到端口的通信 |
会话层 | 控制应用程序之间会话能力,区分不同的进程 |
表示层 | 数据格式表示,基本压缩解密功能 |
应用层 | 各种应用软件 |
# 2.http 状态码
- 2xx 成功
- 200 请求成功并且返回了数据
- 3xx 重定向
- 301 永久重定向
- 302 临时重定向
- 304 未修改
- 4xx 服务端错误
- 400 错误请求
- 401 未授权
- 404 服务器没有找到页面
- 403 没有权限
- 5xx 服务器错误
- 500 服务器内部错误
- 501 未实施
- 502 无效响应
- 503 不可用(超载停机)
# 3.get 和 post
# 4.http 的请求报文
请求行、请求头、空行、请求数据
# 5.http 常见的请求/响应头
通用头部
字段 | 作用 | 值 |
---|---|---|
Cache-Control | 控制缓存 | public:表示响应可以被任何对象缓存(包括客户端、代理服务器);private(默认值):响应只能被单个客户缓存,不能被代理服务器缓存;no-cache:缓存要经过服务器验证,在浏览器使用缓存前,会对比 ETag,若没有变则返回 304,使用缓存;no-store:禁止任何缓存 |
Connection | 是否需要持久连接(HTTP 1.1 默认持久连接) | keep-alive/close |
Transfer-Encoding | 报文主体的传输编码格式 | chunked(分块)/identity(未压缩和修改)/gzip(LZ77 压缩)/compress(LZW 压缩,弃用)/deflate(zlib 结构压缩) |
请求头
字段 | 作用 | 语法 |
---|---|---|
Accept | 告知(服务器)客户端可以处理的内容类型 | text/html/、/* |
if-Modified-Since | 将 Last-Modified 的值发送给服务器,询问资源是否过期,过期则返回新资源,否则返回 304 | |
if-Unmodified-Since | 将 Last-Modified 的值发送给服务器,询问文件是否被修改,若没有则返回 200,否则返回 412 预处理错误,可用于断点续传 |
# 6.HTTP1.0 和 1.1
- 长连接:HTTP1.1 支持长连接和请求的流水线,在一个 TCP 连接上可以传送多个 HTTP 请求,避免了因为多次建立 TCP 连接的时间消耗和延时
- 缓存处理:HTTP/1.1 引入 Entity tag,If-Unmodified-Since,If-Match,If-None-Match 等新的请求头来控制缓存,
- 宽带优化及网路连接的使用:HTTP1.1 则在请求头引入了 range 头域,支持断点续传功能
- Host 头处理:在 HTTP1.0 中认为每台服务器都有唯一的 IP 地址,但随着虚拟主机技术的发展,多个主机共享一个 IP 地址愈发普遍,HTTP1.1 的请求消息和响应消息都应支持 Host 头域,且请求消息中如果没有 Host 头域会 400 错误
# 7.HTTP 2.0 新特性
- 多路复用:即多个请求都通过一个 TCP 连接并发的完成
- 服务端推送:服务端能够主动把资源推送给客户端
- 新的二进制格式:HTTP2 采用二进制格式传输数据,相比于 HTTP1.1 的文本格式,二进制格式具有更好的解析性和拓展性
- header 压缩:HTTP2 压缩消息头,减少了传输数据的大小
# 8.HTTP 2.0 多路复用
http2 解决的问题就是 http1.1 存在的问题
- tcp 启动慢:tcp 建立连接后,会经历一个先慢后快的发送过程,就像汽车启动一般,如果我们的网页文件(HTML/CSS/JS)都经历一次慢启动,对性能是不小的损耗,另外慢启动是 tcp 为了减少网络拥堵的一种策略,我们是没有办法改变的。
- 多条 tcp 连接竞争宽带:如果同时建立多条 tcp 连接,当宽带不足时就会竞争宽带,影响关键资源的下载。
为了解决以上几个问题,http2 一个域名只使用一个 tcp 长连接来传输数据,而且请求直接是并行的,非阻塞的,这就是多路复用。
实现原理:http2 引入了一个二进制分帧层,客户端和服务端进行传输时,数据会先经过二进制分帧层处理,转化为一个个带有请求 ID 的帧,这些帧在传输完成后根据 ID 组合成对应的数据。
# 9.说说 HTTP 3.0
尽管 http2 解决了很多 1.1 的问题,但 http2 仍然有一些缺陷,这些缺陷并不是来自于 http2 协议的本身,而是来源于底层的 tcp 协议,我们知道 tcp 链接是可靠的链接,如果出现了丢包,那么整个连接都要等待重传,http1.1 可以同时使用 6 个 tcp 连接,一个阻塞另外 5 还能工作,但 http2 只有一个 tcp 链接,阻塞的问题被放大了
由于 tcp 协议已经被广泛使用,我们很难直接修改 tcp 协议,基于此 http3 选择了一个折中的方法 udp 协议,http2 在 udp 的基础上实现多路复用,0-rtt,tls 加密、流量控制、丢包重传等功能
# 10.HTTP 和 HTTPS 有何区别
- https 使用 443 端口,而 http 使用 80 端口
- https 需要申请证书
- http 是超文本传输协议,是明文传输,https 是经过 ssl 加密的协议,传输更安全
- https 比 http 慢,因为 https 除了 tcp 握手的三个包,还要加上 ssl 握手的九个包
# 11.HTTPS 是如何进行加密的
# UDP
# 1.面向无连接
# 2.不可靠性
# 3.高效
# 4.传输方式
# 5.适合使用的场景
# TCP
# 1.头部
# 2.状态机
# 3.ARQ 协议
# 4.滑动窗口
# 5.拥堵处理
# HTTP 及 TLS
# 1.HTTP 请求中的内容
# 2.TLS
← 五.缓存策略