计算机网络基础
DNS & CDN
-
DNS 域名系统
-
DNS工具
|- dig 用来查询dns的小工具
|- nslookup 交互查询域名服务工具
|- host -
CDN 内容分发网络(通常存放变动频率底的资源)
|-基于地理位置的分布式代理服务器/数据中心
|- 提高可用性
|- 提升性能
|- 提升体验
HTTP 基本方法
GET - 从服务器获取资源
POST - 在服务端创建资源
PUT - 在服务器修改资源(幂等性=>post调用十次会创建10次资源,但是put只会创建一次资源)
DELETE - 在服务器删除资源
OPTION - 跨域
常见的HTTP状态码
1xx 提供信息
- 100 continue
- 101 协议切换 (websocket)
2xx 请求成功
- 200 ok表示成功
- 201 表示已创建请求
- 202 表示已接收
- 203 非权威内容(表示他原始服务器的内容在中间其他服务器被修改过,-代理服务器)
- 204 没有内容 put请求有这种情况
- 205 重置内容
- 206 服务器只下发部分内容
3xx 重定向
- 300 用户请求了多个选项的资源(资源列表)
- 301 永久转移
- 302 资源被找到(一起是临时转移)(被拆分为303、307)
- 303 可以使用GET方法在另一个URL找到资源
- 304 没有修改(这个资源没有再请求一次)
- 305 需要代理(访问网站没有访问权限)
- 307 临时重定向(不改变方法,post请求就还是会post过去)
- 308 永久重定向(不改变方法,post请求就还是会post过去)
面试解惑
301和308的区别
共同点:
资源被永久移动到新的地址
差异:
客户端收到308请求后,之前是什么method,那么之后也会沿用这个method到新地址
客户端收到301请求后,通常用户会向新地址发起GET请求
303和307的区别
共同点:
资源临时放到新地址(请不要缓存)
差异:
301是http1.0提出的,最早交做Moved Temporarily;很多浏览器实现的时候没有遵循标准,把所有的请求都重定向为GET
1999年增加了303/307,并将302重新定义为Found
303告诉客户端使用GET方法重定向资源
307告诉客户端使用原请求的method重定向资源
4xx 客户端错误
- 400 请求格式错误
- 401 没有授权
- 402 请先付费
- 403 禁止访问
- 404 没有找到
- 405 方法不被允许(请求方式不正确)
- 406 服务端可以提供的内容和客户端期待的不一样(例如编码错误)
5xx 服务端错误
- 500 服务器内部错误(服务器出bug)
- 501 没有实现(缺少接口)
- 502 网关错误
- 503 服务不可用
- 504 网关超时
- 505 版本不支持
常见的HTTP头
HTTPS证书、加密
-
对称加密、非对称加密
-
HTTPS 是对称加密和非对称加密混合使用,通过非对称加密生成固定秘钥形成对称加密
-
HTTPS工作原理:
-
第一个握手:客户端发送syn标志位和seq num,请求服务器建立连接,客户端状态从关闭更改为syn_send
-
第二次握手:服务端返回syn和ack标志位、ack num和seq num,确认第一次握手的报文段,返回acknum=seqnum(1 (第一次握手中发送),同意建立连接,服务器
-
第三次握手:发送确认消息段,返回ack和acknum=seqnum(2 (第二次握手传输的) 1,客户端状态为) established,服务器返回确认消息段
TCP / UDP
-
Internet 协议群(TCP/IP协议群)
- 应用层 (http协议)
- 传输层 (TCP/UDP->HTTP3.0)
- 网络层 (IP)
- 链接层
- 物理层
-
UDP比TCP节省网络资源和迅速
|- 不需要建立链接(延迟更低)
|- 封包体积小(传输速度快)
|- 不关心数据顺序(不需要序列号和ACK,传输快速)
|- 不保证数据不丢失 -
HTTP2.0优化内容
- 多路复用
- 防止队头阻塞
- 压缩HTTP头部
- 服务端推送
-
HTTP3.0优化内容 QUIC
-
UDP把自由度给了用户,使用的人少;TCP自由度低,用的人多。(以为数据传输可靠性算法复杂所以TCP用的人多)
-
HTTP2.0/HTTP3.0都兼容HTTP1.1