edyang

我干了什么 究竟拿了时间换了什么
技术分享时间线软件开发、设备接入、视觉与运维实践

跨域登录:CORS、Cookie 与认证状态

登录接口成功但页面未登录,可能是 Cookie 没保存或没随请求发出。响应可读与凭据可用是不同条件。

登录接口成功但页面未登录,可能是 Cookie 没保存或没随请求发出。响应可读与凭据可用是不同条件。 跨源读取受 CORS 限制,凭据还受允许来源、credentials、Cookie 域和路径影响。代理改变同源关系却不自动修复会话作用域。 一、问题的范围与前提 浏览器所看到的页面、实际请求地址与服务器收到的路径要对应起来。页面来源、代理、缓存、Cookie 和连接生命周期分别影响...

WebSocket 连接管理:重连与旧定时器

页面重建可能保留多条 socket 和定时器,服务端连接数量增加,页面仍显示旧状态。

页面重建可能保留多条 socket 和定时器,服务端连接数量增加,页面仍显示旧状态。 连接归属页面生命周期,握手之后还有消息解析与有效性。关闭时清理资源,恢复后重置退避,后台与网络变化也会影响状态。 一、问题的范围与前提 浏览器所看到的页面、实际请求地址与服务器收到的路径要对应起来。页面来源、代理、缓存、Cookie 和连接生命周期分别影响行为。桌面浏览器、平板与嵌入式 WebVi...

HTTP 重试:时间预算、退避与未知结果

自动重试可能改善瞬时失败,也可能放大下游故障。调用方要限制整体预算,而非只设每次连接超时。

自动重试可能改善瞬时失败,也可能放大下游故障。调用方要限制整体预算,而非只设每次连接超时。 连接、读取与业务错误不同。退避加抖动降低同步重试,非幂等写入在未知结果时不能直接重发。 一、问题的范围与前提 接口由请求身份、参数语义、授权条件和结果状态共同构成。HTTP 层成功只描述传输与响应,业务处理还可能处于受理、执行或等待确认阶段。将外部输入转换为内部对象以后,仍需核对类型、范围和...

离线补传队列:领取、退避与幂等确认

任务长期处于 uploading,不能只看累计次数判断卡住。应检查领取、超时、租约与失败后的下一次时间。

任务长期处于 uploading,不能只看累计次数判断卡住。应检查领取、超时、租约与失败后的下一次时间。 持久队列把发送意图与网络执行分开。领取需并发约束,租约支持崩溃回收;回执丢失后的重试仍需业务幂等身份。 一、问题的范围与前提 消息传输、业务处理与设备执行具有不同完成条件。消息系统可以提供队列和协议确认,但不会自动把数据库写入与物理动作合成一个事务。事件身份、对象版本与会话范围...

MQTT 遗嘱与离线:异常断开和数据失效

遗嘱能辅助表达失联,但离线状态还受心跳间隔、网络分区与正常退出影响。

遗嘱能辅助表达失联,但离线状态还受心跳间隔、网络分区与正常退出影响。 broker 按连接条件发布遗嘱,正常 DISCONNECT 不同于异常中断。旧保留状态、新连接和设备重启可能形成竞争。 一、问题的范围与前提 消息传输、业务处理与设备执行具有不同完成条件。消息系统可以提供队列和协议确认,但不会自动把数据库写入与物理动作合成一个事务。事件身份、对象版本与会话范围需要由应用定义,尤...

MQTT 主题设计:设备身份、命令和访问范围

多设备共用命令主题容易广播误执行。命名需要和设备身份、数据类型及权限共同设计。

多设备共用命令主题容易广播误执行。命名需要和设备身份、数据类型及权限共同设计。 发布订阅解耦并不自动隔离业务。通配符扩大订阅范围,ACL 管理可访问主题,命令仍需目标与任务身份。 一、问题的范围与前提 消息传输、业务处理与设备执行具有不同完成条件。消息系统可以提供队列和协议确认,但不会自动把数据库写入与物理动作合成一个事务。事件身份、对象版本与会话范围需要由应用定义,尤其在重复、乱...

热点缓存过期:回源并发与失效窗口

热点键过期后请求同时回源,可能造成短时过载。缓存未命中并不意味着数据库容量增加。

热点键过期后请求同时回源,可能造成短时过载。缓存未命中并不意味着数据库容量增加。 单飞合并、短期锁与后台刷新可以减少重复回源;锁需过期和异常释放,旧值服务需声明允许滞后。 一、问题的范围与前提 数据库连接、事务、SQL 执行和数据结果应分别验证。一次连接成功不证明事务可写,也不证明原有查询在不同数据库上结果相同。应从实际业务入口取得证据,记录角色、数据库、事务范围与查询条件,再分析...

分页查询:排序不稳定为何重复和漏行

列表翻页出现重复记录,可能是排序键不唯一或数据在分页期间变化。分页需明确顺序和读取范围。

列表翻页出现重复记录,可能是排序键不唯一或数据在分页期间变化。分页需明确顺序和读取范围。 OFFSET 依赖结果位置,插入删除会移动位置。以稳定唯一组合键做游标分页可降低深翻页成本,但并发变化仍需定义语义。 一、问题的范围与前提 数据库连接、事务、SQL 执行和数据结果应分别验证。一次连接成功不证明事务可写,也不证明原有查询在不同数据库上结果相同。应从实际业务入口取得证据,记录角色...

数据库兼容迁移:从连接成功到业务等价

驱动能连接不表示原 SQL、类型和事务假设兼容。迁移先定义业务结果的等价条件,再决定替换范围。

驱动能连接不表示原 SQL、类型和事务假设兼容。迁移先定义业务结果的等价条件,再决定替换范围。 精度、空值排序、分页、序列与时区都可能改变结果。ORM 只覆盖部分方言,总行数相同也不证明关联正确。 一、问题的范围与前提 数据库连接、事务、SQL 执行和数据结果应分别验证。一次连接成功不证明事务可写,也不证明原有查询在不同数据库上结果相同。应从实际业务入口取得证据,记录角色、数据库、...

内网访问公网入口:回流 NAT 与分流解析

外部用户可访问公网入口,内网同一地址失败,不能只据此判断后端停止。回到本地目标的路径不同于真正外网访问。

外部用户可访问公网入口,内网同一地址失败,不能只据此判断后端停止。回到本地目标的路径不同于真正外网访问。 回流 NAT 涉及目标转换与返回方向,响应绕过网关可能使会话不一致。分流 DNS 让内部域名解析到内部入口,减少回流依赖。 一、问题的范围与前提 单台 Linux 主机上的进程、文件、网络和服务管理有各自边界。排查时先确认当前命令所处的用户、网络命名空间与工作目录,再把进程状态...