Tag

#http

包含这个标签的文章。

Python 223 阅读

HTTPX 流式响应偶发 PoolTimeout:从连接未释放到生命周期闭环

Python 服务用 HTTPX 转发大文件、对象存储下载或上游 SSE 时,通常会启用流式响应,避免把整个响应体读入内存。上线后却可能出现一种很迷惑的故障:服务启动时一切正常,运行一段时间后请求开始批量报 httpx.PoolTimeout;重启进程能暂时恢复,单纯调大连接池只能延后复发。 这类问题往往不是上游连接慢

阅读全文
开发 261 阅读

Go OAuth 令牌过期瞬间请求雪崩:用 singleflight 合并刷新并隔离超时

调用第三方 API 的 Go 服务通常会在内存中缓存 OAuth 访问令牌,并在令牌即将过期时刷新。单实例、低并发时,这段逻辑看起来很简单;并发升高后,几十个请求可能同时发现令牌失效,又同时访问认证端点。结果不是更快拿到新令牌,而是认证服务返回 429 Too Many Requests,业务请求批量失败,甚至出现“较

阅读全文
安全 266 阅读

Webhook 签名校验通过仍被重复执行:时间窗、幂等键与防重放实践

适用场景 支付回调、代码仓库事件、消息推送和第三方审批通知通常通过 Webhook 进入业务系统。很多服务已经实现了 HMAC 签名校验,却仍会遇到重复发货、重复记账或重复触发流水线的问题。 这类故障的关键在于:签名只能证明请求内容来自持有密钥的一方,不能证明这次请求从未被处理过。 一个合法请求被代理层、第三方平台或攻

阅读全文
网络 398 阅读

新增 DNS 记录后仍返回 NXDOMAIN:权威链路与负缓存的排查实践

适用场景 为新接口 api.example.test 添加 A 记录后,监控节点已能解析,部分用户却持续报告“找不到域名”。本文以新建记录为例,区分权威服务器未同步、递归解析器负缓存和终端本地缓存。文中的 example.test、权威服务器和 IP 均为示例,执行前须替换为自己的域名与地址。 现象先分清 DNS 查询

阅读全文
安全 442 阅读

API 密钥泄漏后如何无停机处置:双密钥轮换、审计与最小权限实践

适用场景 代码仓库、CI 日志、工单截图或聊天记录中出现了生产 API 密钥。密钥仍在被多个服务使用,直接禁用可能造成业务中断,但继续保留又会扩大攻击窗口。 本文面向服务到服务调用的静态 API 密钥,给出一套可执行的处置流程:先确认影响范围并限制风险,再创建权限更小的新密钥,通过短暂的双密钥窗口迁移调用方,验证新密钥

阅读全文
云原生 439 阅读

Kubernetes 滚动发布偶发 502:从终止竞态到连接排空的治理实践

适用场景 本文适用于通过 Kubernetes Deployment 滚动发布的 HTTP 服务。系统平时运行正常,但每次发布、缩容或节点驱逐时都会出现少量 502、连接重置或上游提前关闭;错误只持续几秒,Pod 日志里又看不到明显异常。 这类问题通常不是新版本启动失败,而是旧 Pod 的进程退出、EndpointSl

阅读全文
开发 454 阅读

TypeScript 请求已超时却仍占用连接:用 AbortController 建立可取消的重试边界

适用场景 本文适用于 Node.js 20.3 及以上版本使用原生 fetch 调用内部 API、第三方服务或网关的 TypeScript 项目。示例使用该版本提供的 AbortSignal.any();更早版本可以用等价的信号组合函数替代。典型现象是:业务层已经返回“请求超时”,但下游仍持续收到请求;并发升高后连接数

阅读全文
安全 504 阅读

JWT 密钥轮换后批量 401:用 kid 双钥并行实现无感切换与可回滚发布

适用场景 业务使用 RS256 JWT 在网关、API 服务和后台任务之间传递身份。为了满足密钥泄露应急、合规轮换或证书到期要求,需要定期替换签名私钥,但又不能让尚未过期的旧令牌突然失效。 本文给出一套可直接落地的轮换方法:令牌头携带 kid,验证端同时信任新旧公钥,签发端再切换当前私钥,最后根据令牌最长生命周期安全下

阅读全文