当前位置: 首页 > news >正文

【计算机基础】网络系列(一)HTTP

网络模型基础

OSI与TCP/IP模型对比

OSI七层参考模型

  • 应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

TCP/IP四层参考模型

  • 应用层(HTTP、DNS、FTP等)

  • 传输层(TCP、UDP)

  • 网络层(IP)

  • 网络接口层

应用层协议概览

常见的应用层协议包括:HTTP、HTTPS、DNS、FTP、SMTP等,它们构成了互联网应用的基础通信标准。

HTTP报文结构详解

请求报文组成

  1. 请求行:包含请求方法、URL和HTTP版本

  2. 请求头部:Host、User-Agent、Content-Type等元数据

  3. 空行:分隔头部和主体

  4. 请求体:传输的数据内容(如POST请求的参数)

响应报文组成

  1. 状态行:HTTP版本、状态码和状态信息

  2. 响应头部:Content-Type、Content-Length等元数据

  3. 空行:分隔头部和主体

  4. 响应体:服务器返回的实际内容

HTTP状态码

状态码类别

  • 1xx:信息性状态码

  • 2xx:成功状态码(如200 OK)

  • 3xx:重定向状态码(301永久重定向,302临时重定向)

  • 4xx:客户端错误(404未找到,405方法不支持)

  • 5xx:服务器错误(500内部错误,502网关错误,503服务不可用)

运维实践:5xx错误排查

  • 500错误:通常表示应用代码问题,需检查服务器日志

  • 503错误:往往由服务器过载引起,需要检查资源使用情况和服务进程状态

HTTP请求方法

  • GET:请求资源,参数在URL中,可缓存,幂等操作

  • POST:提交数据,参数在请求体中,非幂等

  • PUT:更新资源

  • DELETE:删除资源

  • HEAD:获取资源元数据

GET与POST关键区别

  1. 安全性:GET参数暴露在URL中,POST相对安全

  2. 缓存性:GET可被缓存,POST通常不缓存

  3. 幂等性:GET是幂等的,POST非幂等

  4. 数据长度:GET有长度限制,POST无限制

HTTP/1.1核心技术

请求拆包机制

通过Content-Length头字段明确指示请求正文长度,确保完整传输。同时支持断点续传功能,提升大文件传输体验。

HTTPS安全机制

HTTP与HTTPS核心区别

  • 安全性:HTTPS通过SSL/TLS加密传输数据

  • 端口号:HTTP使用80端口,HTTPS使用443端口

  • 证书要求:HTTPS需要CA颁发的数字证书验证身份

TLS握手过程详解

  1. ClientHello:客户端发送支持协议版本、随机数和密码套件

  2. ServerHello:服务器确认参数并发送证书

  3. 密钥交换:客户端生成预主密钥并用服务器公钥加密

  4. 完成握手:双方独立计算会话密钥,开始加密通信

防范中间人攻击机制

  • 加密保护:攻击者无法获得服务器私钥,无法解密数据

  • 身份验证:数字证书确保通信对方身份真实性

HTTP版本演进对比

HTTP/1.1 → HTTP/2.0重大改进

  1. 二进制协议:提高解析效率

  2. 头部压缩:采用HPACK算法减少冗余

  3. 多路复用:解决队头阻塞问题

头部压缩

HTTP/2使用HPACK算法,客户端和服务器维护共同的头信息表,通过发送索引号而非完整字段,显著减少带宽占用。

多路复用

允许单个TCP连接上并行传输多个请求/响应,彻底解决HTTP/1.1的队头阻塞问题,减少TCP连接数量,提升效率。

HTTP/2.0的局限性

虽然解决应用层队头阻塞,但底层仍依赖TCP协议,存在传输层队头阻塞问题,这促使了HTTP/3的发展。

HTTP/3.0的革命性变革

基于QUIC协议(运行在UDP之上),从传输层解决队头阻塞,内置TLS加密,显著降低连接建立延迟。

TCP连接中断条件

  • 主动关闭连接

  • 超时重传达到最大次数

  • 空闲超时

HTTP、Socket与TCP关系澄清

  • TCP:传输层协议,保证可靠连接

  • HTTP:应用层协议,定义数据格式和规则

  • Socket:编程接口,连接应用层与传输层

HTTP的无状态特性与状态保持

HTTP无状态本质

HTTP协议本身是无状态的,每个请求相互独立,服务器不保留客户端状态信息。这种设计简化了服务器架构,但无法满足需要状态保持的Web应用需求。

Cookie与Session对比

特性CookieSession
存储位置客户端浏览器服务器端
安全性较低,用户可查看修改较高,敏感数据在服务器
存储容量4KB左右,数量有限理论上无限制
生命周期可设置持久性或会话级通常会话级,可设置超时
网络传输每次请求自动携带仅传输Session ID
Cookie禁用场景下的解决方案

当用户禁用Cookie时,Session无法正常使用,但可通过URL重写技术作为备选方案:

  • 在所有链接和表单中手动附加Session ID参数

  • 缺点:安全性低,实现复杂,现代应用通常要求启用Cookie

Session集群优化方案

为解决Session带来的服务器压力,常见优化策略:

水平扩展:采用共享存储方案

  • Redis集群(主流方案,高性能)

  • 数据库存储(适合小型应用)

  • Zookeeper(强一致性场景)

资源优化

  • 设置合理超时时间

  • 减少Session数据量

  • 客户端存储非敏感信息

Redis Session集群

工作流程:
1. 所有Web服务器将Session数据序列化存入Redis集群
2. 负载均衡器将请求分发到任意服务器
3. 服务器通过Session ID从Redis获取统一会话数据

技术要点:
- 采用哨兵模式保证高可用性
- 设置TTL自动过期机制
- 使用MsgPack等高效序列化协议

客户端存储方案对比

LocalStorage与Cookie差异

维度CookieLocalStorage
生命周期可设置过期时间永久存储,手动删除
存储容量几KB几MB
网络传输每次请求自动发送仅本地存储
安全性较低,易被窃取相对安全

Cookie适用场景:跨域访问、会话管理、设置过期时间

LocalStorage适用场景:大数据存储、永久缓存、同域页面共享

JWT令牌

JWT由三部分组成,使用点号分隔:

Header.Payload.Signature

  1. 头部(Header):令牌类型和签名算法

  2. 载荷(Payload):用户声明信息(用户ID、角色等)

  3. 签名(Signature):验证令牌完整性和真实性

JWT与传统Session对比优势

  • 分布式友好:无需共享Session存储,适合微服务架构

  • 扩展性强:任何服务器都可独立验证令牌

  • 跨域支持:天然支持跨域身份验证

安全性机制
  • 数字签名确保令牌完整性

  • 只有持有正确密钥的服务器才能验证

  • 比传统Cookie更安全的身份验证方式

JWT在集群部署中的应用价值

集群部署挑战:多服务器间Session同步复杂
JWT解决方案:令牌包含完整身份信息,每台服务器可独立验证,实现无状态水平扩展

JWT实践中的挑战与解决方案

令牌撤销问题

挑战:JWT签发后无法主动失效
解决方案

短有效期+刷新令牌

  • 访问令牌短期有效(15-60分钟)

  • 刷新令牌长期有效,服务器端可撤销

  • 退出登录时吊销刷新令牌

令牌黑名单机制

  • 维护失效令牌黑名单(Redis)

  • 每次验证检查黑名单状态

  • 牺牲部分无状态性换取控制力

数据一致性维护

问题:Payload信息过期导致客户端服务端数据不一致
最佳实践

  • 避免在JWT中存储频繁变更的数据

  • 重要信息变更时主动触发令牌刷新

  • 客户端检测到数据过期主动重新认证

JWT安全防护策略

令牌泄露应对

及时标记失效令牌、主动刷新令牌机制、黑名单管理可疑令牌。

前端存储方案对比

存储方式优点缺点适用场景
LocalStorage容量大,不随请求发送XSS风险高非敏感数据
SessionStorage标签页级隔离刷新需重新认证临时会话
HttpOnly Cookie防XSS,HTTPS安全容量小,CSRF风险高安全要求

单点登录(SSO)实现方案

关联服务自动登录技术

集中式Session存储

  • 所有服务共享持久化Session存储

  • 优点:架构清晰

  • 缺点:单点故障风险,工程量大

JWT无状态方案

  • 令牌包含完整身份信息

  • 服务间无需Session同步

  • 适合微服务架构

现代通信协议

HTTP与RPC的互补关系
  • HTTP:对外标准化服务,浏览器兼容

  • RPC:内部微服务通信,高性能调用

  • 典型组合:对外HTTP API,内部gRPC通信

WebSocket实时通信优势
  • 全双工通信:支持服务器主动推送

  • 适用场景:实时聊天、在线游戏、高频双向通信

  • 与HTTP对比:HTTP半双工,WebSocket全双工

DNS

DNS层次结构

根DNS服务器(.) → 顶级域服务器(.com) → 权威DNS服务器(server.com)

DNS查询过程

  1. 本地缓存查询:检查浏览器和系统缓存

  2. 本地DNS服务器:ISP提供的解析服务

  3. 递归查询链:根服务器→顶级域→权威服务器

  4. 结果缓存:各级服务器缓存结果提高效率

DNS协议技术细节

  • 主要协议:UDP(快速响应,头部小)

  • TCP备用:数据超512字节或需要可靠传输时

  • 端口号:53

Nginx负载均衡策略

常用算法对比

算法原理适用场景
轮询依次分配请求简单均衡
加权轮询按权重分配服务器性能不均
IP哈希同一IP固定服务器会话保持
URL哈希相同URL固定服务器缓存优化
最短响应时间响应快的优先性能优化

Nginx在网络模型中的定位

  • 所在层级:应用层(第七层)

  • 核心功能:七层负载均衡、反向代理、静态资源服务

http://www.dtcms.com/a/414360.html

相关文章:

  • Linux与STM32实时性与系统资源解析
  • 深圳网站建设icxun邯郸二手房出售信息
  • 展示内容框
  • 衡石HQL深度解析:如何用类SQL语法实现跨源数据的高效联邦查询?
  • 明明是新电脑,却越用越卡?如何优化?
  • StringBuffer和StringBuilder
  • 华为本地pbr及mqc及traffic-filter使用案例
  • Spring 依赖注入
  • 南宁做网站优化的公司类似58同城分类信息网站开发
  • ArkTS基础语法
  • ROS-Jazzy_rclpy
  • Socket 编程 TCP(准备阶段)
  • 【Ultralytics】评估报错:解决 KeyError: ‘info‘ 错误
  • 哪些是实名制网站母了猜猜看游戏做网站
  • 【Linux】TCP原理
  • 论文阅读:arxiv 2024 Fast Adversarial Attacks on Language Models In One GPU Minute
  • OpenJDK 17 方法链接与同步方法入口点生成机制深度解析
  • qt-C++笔记之自定义绘制:QWidget中的paintEvent 与 QGraphicsItem中的paint
  • 项目:智能排队控制系统
  • LeetCode:71.字符串解码
  • LeetCode:66.搜索旋转排序数组
  • 阿帕奇网站搭建六安做网站的
  • wordpress去除评论表单电子商务seo优化
  • deepseek kotlin flow快生产者和慢消费者解决策略
  • 20.NFS iSCSI服务器
  • uniapp 搭建vue项目,快速搭建项目
  • 自动网页浏览助手:基于 Selenium + GLM-4V 的百度自动搜索与内容提取系统
  • 网站地图什么时候提交好网站自响应
  • 深度学习笔记(一)——线性回归、Softmax回归、多层感知机、环境和分布偏移
  • 网站建设教程要去d湖南岚鸿询 问2022年企业年报网上申报流程