Files
npm-tool/.qoder/repowiki/zh/content/配置指南/HTTP 请求配置.md

320 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# HTTP 请求配置
<cite>
**本文引用的文件**
- [TsHttpUtil.js](file://src/https/TsHttpUtil.js)
- [TsGlobalConfig.js](file://src/utils/TsGlobalConfig.js)
- [TsStorage.js](file://src/utils/TsStorage.js)
- [TsCommon.js](file://src/utils/TsCommon.js)
- [TsCrypto.js](file://src/utils/TsCrypto.js)
- [TsSM4.js](file://src/utils/TsSM4.js)
- [index.js](file://index.js)
- [package.json](file://package.json)
- [README.md](file://README.md)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能与缓存策略](#性能与缓存策略)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录:完整配置示例与最佳实践](#附录完整配置示例与最佳实践)
## 简介
本文件面向使用 TsHttpUtil 的开发者,系统性说明 HTTP 请求配置项、请求头设置、超时控制、重试机制、httpParams 回调、请求拦截与响应处理、错误处理 onHttpError、认证与代理、SSL 与加密、性能优化与缓存策略,以及调试与监控方法。文档基于仓库源码进行逐层解析,并提供可直接落地的配置建议与流程图示。
## 项目结构
该工具包以“功能域”组织https 层负责网络请求封装utils 层提供全局配置、存储、通用工具、加解密等支撑能力;入口 index.js 汇总导出模块。
```mermaid
graph TB
subgraph "入口"
IDX["index.js"]
end
subgraph "HTTPS 层"
HTTP["TsHttpUtil.js"]
end
subgraph "工具层"
GC["TsGlobalConfig.js"]
ST["TsStorage.js"]
CM["TsCommon.js"]
CR["TsCrypto.js"]
SM["TsSM4.js"]
end
IDX --> HTTP
HTTP --> GC
HTTP --> ST
HTTP --> CM
HTTP --> CR
CR --> SM
```
图表来源
- [index.js:1-16](file://index.js#L1-L16)
- [TsHttpUtil.js:1-171](file://src/https/TsHttpUtil.js#L1-L171)
- [TsGlobalConfig.js:1-34](file://src/utils/TsGlobalConfig.js#L1-L34)
- [TsStorage.js:1-55](file://src/utils/TsStorage.js#L1-L55)
- [TsCommon.js:1-98](file://src/utils/TsCommon.js#L1-L98)
- [TsCrypto.js:1-34](file://src/utils/TsCrypto.js#L1-L34)
- [TsSM4.js:1-456](file://src/utils/TsSM4.js#L1-L456)
章节来源
- [index.js:1-16](file://index.js#L1-L16)
- [package.json:1-24](file://package.json#L1-L24)
## 核心组件
- TsHttpUtil统一请求入口封装 GET/POST/FORM内置默认错误处理、请求头注入、参数合并与加密逻辑。
- TsGlobalConfig全局配置中心支持 prefix 前缀、onHttpError 错误回调、httpParams 动态参数注入。
- TsStorage本地存储与用户 Token 管理,支持开关 body 加密。
- TsCommon通用工具含空值判断、JSON 解析、开发环境判断等。
- TsCrypto/TsSM4SM4 对称加密实现,配合 base64 密钥与模式配置。
章节来源
- [TsHttpUtil.js:25-171](file://src/https/TsHttpUtil.js#L25-L171)
- [TsGlobalConfig.js:1-34](file://src/utils/TsGlobalConfig.js#L1-L34)
- [TsStorage.js:1-55](file://src/utils/TsStorage.js#L1-L55)
- [TsCommon.js:1-98](file://src/utils/TsCommon.js#L1-L98)
- [TsCrypto.js:1-34](file://src/utils/TsCrypto.js#L1-L34)
- [TsSM4.js:1-456](file://src/utils/TsSM4.js#L1-L456)
## 架构总览
TsHttpUtil 在 umi-request 基础上扩展了:
- 默认错误处理 errorHandler
- 默认携带 cookie、JSON 请求体类型
- 统一参数处理 dealParamsBody分页、equals、动态参数注入
- 请求前缀 prefix 注入
- 自动注入用户 Token
- 响应体解密与数据提取
- 错误回调 onHttpError
```mermaid
sequenceDiagram
participant App as "应用"
participant Http as "TsHttpUtil"
participant Umi as "umi-request"
participant Cfg as "TsGlobalConfig"
participant Store as "TsStorage"
participant Crypto as "TsCrypto/TsSM4"
App->>Http : 调用 get/post/form(req)
Http->>Cfg : 读取 prefix/httpParams/onHttpError
Http->>Store : 读取用户 Token
Http->>Http : 合并动态参数/分页/equals
Http->>Http : 条件加密 encryptBody
Http->>Umi : request(url, options)
Umi-->>Http : 返回响应
Http->>Http : 解密/提取 data/recordsTotal
Http-->>App : Promise.resolve(data, recordsTotal)
Http->>Cfg : onHttpError(res)失败时
```
图表来源
- [TsHttpUtil.js:99-134](file://src/https/TsHttpUtil.js#L99-L134)
- [TsGlobalConfig.js:19-29](file://src/utils/TsGlobalConfig.js#L19-L29)
- [TsStorage.js:13-23](file://src/utils/TsStorage.js#L13-L23)
- [TsCrypto.js:5-31](file://src/utils/TsCrypto.js#L5-L31)
- [TsSM4.js:96-453](file://src/utils/TsSM4.js#L96-L453)
## 详细组件分析
### 1) 请求配置与默认行为
- 默认错误处理:对无响应或状态码映射到统一消息。
- 凭据策略:默认携带 Cookie。
- 请求体类型:默认 JSON。
- 请求前缀:支持字符串或函数式前缀,按 URL 动态拼接。
- 动态参数注入:通过 httpParams 回调注入到 GET 查询参数或非表单 POST 请求体中。
- 用户 Token自动从本地存储读取并注入到请求头 token 字段。
- 响应处理:默认仅返回 data 与 recordsTotal若响应标记加密则自动解密并解析 JSON。
章节来源
- [TsHttpUtil.js:28-44](file://src/https/TsHttpUtil.js#L28-L44)
- [TsHttpUtil.js:99-134](file://src/https/TsHttpUtil.js#L99-L134)
- [TsGlobalConfig.js:5-21](file://src/utils/TsGlobalConfig.js#L5-L21)
- [TsStorage.js:13-15](file://src/utils/TsStorage.js#L13-L15)
### 2) httpParams 回调函数详解
- 触发时机:在 GET 请求合并查询参数、或非表单 POST 请求合并请求体之前。
- 参数与返回:回调接收当前请求上下文(由全局配置提供),返回一个对象作为额外参数注入。
- 使用场景:统一注入业务维度参数(如租户 ID、版本号、traceId、环境标识、签名参数等。
- 注意事项GET 与非表单 POST 的注入位置不同,避免覆盖关键字段。
章节来源
- [TsHttpUtil.js:70-88](file://src/https/TsHttpUtil.js#L70-L88)
- [TsGlobalConfig.js:10-12](file://src/utils/TsGlobalConfig.js#L10-L12)
### 3) 请求头设置与认证
- 自动头注入:每次请求自动附加 token 头部,值来自用户 Token。
- 手动头覆盖:可通过 options.headers 传入自定义头,会与默认头合并。
- 认证策略:建议在 httpParams 或 headers 中注入 Authorization/Bearer 等,结合用户 Token 管理。
章节来源
- [TsHttpUtil.js:108-112](file://src/https/TsHttpUtil.js#L108-L112)
- [TsStorage.js:13-15](file://src/utils/TsStorage.js#L13-L15)
### 4) 超时与重试机制
- 超时umi-request 支持 timeout 配置,可在 options 中传入TsHttpUtil 不在内部强制设置。
- 重试:未内置重试逻辑,可在上层封装或通过 umi-request 的 retry 选项实现(需在调用侧传入)。
章节来源
- [TsHttpUtil.js:108-112](file://src/https/TsHttpUtil.js#L108-L112)
- [package.json:19-22](file://package.json#L19-L22)
### 5) 请求拦截器与响应处理器
- 请求拦截:通过 options.headers、httpParams 注入参数与头prefix 前缀在请求发起前拼接。
- 响应处理:默认解析 data/recordsTotal若响应带加密标记则自动解密。
- 自定义处理:通过 rawResponse 可直接返回原始响应对象,交由调用方自行处理。
章节来源
- [TsHttpUtil.js:108-134](file://src/https/TsHttpUtil.js#L108-L134)
### 6) 错误处理 onHttpError
- 默认行为将错误映射为统一结构code/message
- 自定义回调:通过 TsGlobalConfig.setConfig 注入 onHttpError用于统一上报、埋点、登录态失效处理等。
- 触发条件:当响应 code 非 200 时触发。
章节来源
- [TsHttpUtil.js:28-35](file://src/https/TsHttpUtil.js#L28-L35)
- [TsHttpUtil.js:125-127](file://src/https/TsHttpUtil.js#L125-L127)
- [TsGlobalConfig.js:8-9](file://src/utils/TsGlobalConfig.js#L8-L9)
### 7) 加密与安全
- 加密开关:通过 TsStorage.saveEncryptBody(true/false) 控制是否对请求体进行加密。
- 加密算法SM4ECB/可选 CBC密钥来自 TsGlobalConfig.base64Key。
- 解密:响应体若标记加密,自动解密并解析 JSON。
- 建议:生产环境务必使用强密钥与 HTTPS避免明文传输。
章节来源
- [TsHttpUtil.js:82-86](file://src/https/TsHttpUtil.js#L82-L86)
- [TsHttpUtil.js:119-122](file://src/https/TsHttpUtil.js#L119-L122)
- [TsStorage.js:17-23](file://src/utils/TsStorage.js#L17-L23)
- [TsCrypto.js:5-31](file://src/utils/TsCrypto.js#L5-L31)
- [TsSM4.js:96-453](file://src/utils/TsSM4.js#L96-L453)
### 8) 参数处理与分页/equals
- 分页:将 pagination 对象转换为 pageSize/pageNum 并移除 pagination。
- equals将对象转为逗号分隔的键值串过滤空值。
- 动态参数:通过 httpParams 注入GET 合并到查询参数,非表单 POST 合并到请求体。
章节来源
- [TsHttpUtil.js:50-91](file://src/https/TsHttpUtil.js#L50-L91)
### 9) 环境差异化配置策略
- 开发环境:可启用 httpParams 注入调试参数、开启日志输出prefix 指向本地/联调服务。
- 测试环境:启用 httpParams 注入测试标识;开启轻量级错误上报;必要时开启加密。
- 生产环境:严格启用 HTTPS、固定密钥、关闭敏感日志onHttpError 上报统一错误;限制 httpParams 注入范围。
章节来源
- [TsCommon.js:63-65](file://src/utils/TsCommon.js#L63-L65)
- [TsGlobalConfig.js:5-21](file://src/utils/TsGlobalConfig.js#L5-L21)
## 依赖关系分析
```mermaid
graph LR
HTTP["TsHttpUtil.js"] --> GC["TsGlobalConfig.js"]
HTTP --> ST["TsStorage.js"]
HTTP --> CM["TsCommon.js"]
HTTP --> CR["TsCrypto.js"]
CR --> SM["TsSM4.js"]
IDX["index.js"] --> HTTP
PKG["package.json"] --> HTTP
```
图表来源
- [TsHttpUtil.js:1-5](file://src/https/TsHttpUtil.js#L1-L5)
- [TsGlobalConfig.js:1-34](file://src/utils/TsGlobalConfig.js#L1-L34)
- [TsStorage.js:1-5](file://src/utils/TsStorage.js#L1-L5)
- [TsCommon.js:1-4](file://src/utils/TsCommon.js#L1-L4)
- [TsCrypto.js:1-3](file://src/utils/TsCrypto.js#L1-L3)
- [TsSM4.js:1-3](file://src/utils/TsSM4.js#L1-L3)
- [index.js:1-6](file://index.js#L1-L6)
- [package.json:19-22](file://package.json#L19-L22)
章节来源
- [TsHttpUtil.js:1-5](file://src/https/TsHttpUtil.js#L1-L5)
- [package.json:19-22](file://package.json#L19-L22)
## 性能与缓存策略
- 请求合并:优先使用 httpParams 合并公共参数,减少重复字段。
- 数据压缩:在服务端支持前提下,考虑 gzip/deflate 传输。
- 缓存策略:对 GET 请求可结合业务缓存(如内存/LocalStorage避免重复请求注意缓存失效与一致性。
- 超时与并发:合理设置 timeout避免阻塞对批量请求采用并发控制。
- 加密成本:加密/解密为 CPU 密集型,建议仅对敏感数据启用,或在高频接口中评估开销。
[本节为通用指导,不直接分析具体文件]
## 故障排查指南
- 无法登录/鉴权失败:检查 headers 中 token 是否正确注入;确认 httpParams 是否覆盖了必要的认证头。
- 参数丢失:确认 GET 与非表单 POST 的参数注入位置;避免与 options.params/data 冲突。
- 加密异常:确认 TsStorage.encryptBody 开关、base64Key 正确、服务端密钥一致。
- 错误未上报:确认 onHttpError 是否正确注入;检查响应 code/message 映射。
- 调试方法:开启浏览器 Network 面板,观察请求头、参数、响应体;在 httpParams 中注入 traceId 便于后端定位。
章节来源
- [TsHttpUtil.js:108-134](file://src/https/TsHttpUtil.js#L108-L134)
- [TsGlobalConfig.js:8-9](file://src/utils/TsGlobalConfig.js#L8-L9)
- [TsStorage.js:17-23](file://src/utils/TsStorage.js#L17-L23)
- [TsCrypto.js:5-31](file://src/utils/TsCrypto.js#L5-L31)
## 结论
TsHttpUtil 提供了简洁而强大的 HTTP 封装,通过全局配置与工具层能力,实现了参数注入、认证、加密、错误处理与响应解密等关键能力。建议在不同环境下采用差异化的配置策略,并结合调试与监控手段持续优化性能与稳定性。
[本节为总结,不直接分析具体文件]
## 附录:完整配置示例与最佳实践
### 1) 全局配置示例(开发/测试/生产)
- 开发环境
- prefix: 指向本地/联调地址
- httpParams: 注入 debug=true、env=dev、traceId
- onHttpError: 输出到控制台或轻量上报
- encryptBody: false
- 测试环境
- prefix: 指向测试域名
- httpParams: 注入 env=test、version、tenantId
- onHttpError: 轻量上报
- encryptBody: 可选开启
- 生产环境
- prefix: 指向生产域名
- httpParams: 仅注入必要参数(如 tenantId、version
- onHttpError: 完整上报(含堆栈)
- encryptBody: 必须开启base64Key 固定且保密
章节来源
- [TsGlobalConfig.js:5-21](file://src/utils/TsGlobalConfig.js#L5-L21)
- [TsCommon.js:63-65](file://src/utils/TsCommon.js#L63-L65)
### 2) 认证配置
- 方案一:在 headers 中注入 Authorization/Bearer
- 方案二:在 httpParams 中注入 token 参数
- 方案三:结合用户 Token 管理TsStorage.getUserToken
章节来源
- [TsHttpUtil.js:108-112](file://src/https/TsHttpUtil.js#L108-L112)
- [TsStorage.js:13-15](file://src/utils/TsStorage.js#L13-L15)
### 3) 代理与 SSL
- 代理通过网络层或构建工具配置TsHttpUtil 不直接处理代理。
- SSL生产环境必须启用 HTTPS确保证书有效与中间人攻击防护。
[本节为通用指导,不直接分析具体文件]
### 4) 性能优化与缓存
- 合理设置 timeout避免长时间阻塞
- 对高频 GET 接口增加本地缓存
- 仅对敏感数据启用加密,评估 CPU 开销
- 使用 httpParams 合并公共参数,减少请求体积
[本节为通用指导,不直接分析具体文件]
### 5) 调试与监控
- 在 httpParams 中注入 traceId、version、env
- onHttpError 上报统一错误,包含 code/message/URL
- 使用浏览器 Network 面板与后端日志联动定位问题
章节来源
- [TsGlobalConfig.js:8-9](file://src/utils/TsGlobalConfig.js#L8-L9)