首页
热点话题
全栈
开发工具
经典语录
前端技术
后端技术
智能体
搜索
登录
搜索
一笑痕
人生若只如初见,
是可喜亦或者是可悲?
累计撰写
201
篇文章
累计收到
7
条评论
首页
热点话题
全栈
开发工具
经典语录
前端技术
后端技术
智能体
全栈
2026-10-16
Node fetch 发 ReadableStream,漏写 duplex 会先报错
Node v26.8.1 用 ReadableStream 作为 POST 请求体时,少了 duplex 会在请求发出前抛 TypeError;补上 duplex: 'half' 后,本机服务端收到 12 字节正文并返回 200。
2026年-10月-16日
5 阅读
0 评论
全栈
2026-10-15
fetch 收到 204,json() 仍然会抛错
本机用 Node fetch 请求本地 204 接口,fetch 正常返回且 ok 为 true,json() 却因空响应体抛出 SyntaxError。按接口约定先处理无内容响应,再决定是否解析 JSON。
2026年-10月-15日
11 阅读
0 评论
全栈
2026-10-14
POST 在哪一步变成 GET,302 与 303 的差别
让 POST 跟一次跳转:302 与 303 到终点时方法已是 GET,请求体从 4 字节掉到 0;307 与 308 原样保留。跨源那一跳上 Authorization 与 Cookie 被剥掉。
2026年-10月-14日
16 阅读
0 评论
全栈
2026-10-13
180 字节的响应体,头要付 2086 字节
180 字节的响应,一个来回 456 字节,头占 60.5%。Cookie 加到 1800 字节,来回涨到 2266 字节,体只剩 7.9%。gzip 只动体,404 与 304 没有体,头照付。
2026年-10月-13日
15 阅读
0 评论
全栈
2026-10-12
发布上线了,一部分用户看到的还是上一版
静态资源的缓存头写得很足,顺手也给 index.html 配了同样的一年强缓存。发布完新版本,一部分用户刷新多少次都还是旧页面,服务端那边一次请求都没有。本机按两种响应头把这套流程复现一遍,看请求到底有没有发出去。
2026年-10月-12日
19 阅读
0 评论
全栈
2026-10-11
导出接口的中文文件名,浏览器存下来是乱码
后端把中文文件名直接写进 Content-Disposition 的 filename,落盘时变成一串带重音符的字母。规范里非 ASCII 要用 RFC 5987 的 ext-value 写进 filename,两个参数同时出现时收件方取 filename。把这段的解析规则和实测放在一起看。
2026年-10月-11日
17 阅读
0 评论
全栈
2026-10-8
同一串时刻,存成 epoch 整数还是文本
同一串时刻在 JavaScript、JSON 和 SQLite 之间走一遍,形态各变一次。纯日期按 UTC 解析,带时间的按本机时区解析;Date 过 JSON 成了字符串;SQLite 的 DATETIME 只是列名,存文本要零填充加统一时区,存 epoch 整数排序比较都稳。
2026年-10月-8日
33 阅读
0 评论
全栈
2026-10-7
重连之后列表多出三条重复消息,补数据的那一步写错了
页面用 SSE 推列表,网络抖一下重连之后多出三条重复记录。服务端不看 Last-Event-ID 这个头,重连就是从头推一遍。附四种重连写法的实测结果,以及把 id 当字符串比较时事件超过九条就断档的原因。
2026年-10月-7日
36 阅读
0 评论
全栈
2026-9-30
206 只发了 10 个字节,长度声明却写 1024
拖动进度条和断点续传都走 Range 请求。返回 206 时 Content-Length 该写这条消息的正文长度,不是整个文件的长度;写成后者,本机 curl 报 18 并停在那里。规范条文与本机六组实测对照。
2026年-9月-30日
59 阅读
0 评论
全栈
2026-9-29
别用 X-Forwarded-For 最左边那段,那是客户端自己填的
同一台机器发五个请求,各自往 X-Forwarded-For 里塞一个不同的 IP,后端按第一个值取客户端地址,就得到五个不同身份,限流和黑名单同时失效。两层代理本机搭起来实测:取值位置放在哪一段,结果完全不同,取最后一个才稳定。
2026年-9月-29日
54 阅读
0 评论
全栈
2026-9-28
网关先验签再解析 JSON,解析器拿到的是空串
签名校验通过,JSON 解析报 Unexpected end of JSON input,两个中间件各自都认为自己做对了。请求体是一支只能读一次的流,谁先读完谁拿全,后面的人拿到 0 字节。六条检查项把这件事的边界钉住,包括为什么这类 bug 不会在日志里留下痕迹。
2026年-9月-28日
58 阅读
0 评论
全栈
2026-9-27
翻到第二页,第一页的三行又出现了
列表按 id 倒序分页,每页 10 条,用户在第二页看到第一页见过的三行。数据没重复,差在 LIMIT 与 OFFSET 的锚点写着「第几行」,而行本身在动。新增写入造成重复,删除造成漏行,连翻六页时 60 行里有 15 行是重复的。
2026年-9月-27日
48 阅读
0 评论
全栈
2026-9-26
两个缓存校验头一起到达,规范要求忽略旧的那个
一个资源同时带 ETag 和 Last-Modified,客户端下次可能把两个校验头一起发回来。RFC 9110 把优先级写得很直白:If-None-Match 在场时,If-Modified-Since 必须被忽略。本机用两个实现跑同一组请求,看状态码在哪一格分叉,顺带撞上弱校验与秒级粒度两个坑。
2026年-9月-26日
50 阅读
0 评论
全栈
2026-9-25
204 带着错误信息回来,客户端只拿到空串
服务端用 204 回了一个「订单不存在」,body 里那句提示一个字都到不了客户端:报文里连 Content-Length 都没有,fetch 读到的是空串,按 JSON 解析直接抛 SyntaxError。从起服务到抓原始报文,一步步复现并给出客户端的兜底写法。
2026年-9月-25日
66 阅读
0 评论
全栈
2026-9-24
302 跳转之后 POST 变成 GET,订单号在中间那跳丢了
301、302、303 会把跟随重定向的 POST 改写成 GET,请求体一并丢弃;307 和 308 才保留方法与请求体。差别在服务器收到的请求体长度上,一个 23 一个 0。
2026年-9月-24日
75 阅读
0 评论
全栈
2026-9-23
Set-Cookie 别拼成一行,两个 Cookie 会变成一个
网关转发上游响应时,把 Set-Cookie 数组按逗号拼成一行,是一条很常见的写法。实测下来两个 Cookie 会合并成一条,带 Expires 的那条还会被逗号切成两条。规范里这条头本来就不允许合并,Node 的 setHeader 也接受数组。
2026年-9月-23日
75 阅读
0 评论
全栈
2026-9-22
跟着跳转走一趟,POST 和 Authorization 各在哪一步没了
同样一个 POST 请求跟一次跳转,301、302、303 到终点时已经变成 GET,请求体没了;307 和 308 保持 POST。Authorization 在跨源那一跳被剥掉。本机两个服务端逐条记账,把状态码、方法、请求体字节数、头部有无摆在同一次运行里。
2026年-9月-22日
83 阅读
0 评论
全栈
2026-9-21
跨站能带上的只有 None 加 Secure 这一种
本机起两个源,接口在 127.0.0.1、页面在 localhost,用真实 Chrome 发出请求,服务端逐条记下收到哪些 Cookie。十几组场景排成矩阵:SameSite、Path、credentials 与顶层导航各占一块。
2026年-9月-21日
81 阅读
0 评论
全栈
2026-9-20
同一份报文,按边界切 5 段,按空行切 7 段
本机起一个只记录原始报文的服务,用真实浏览器和 Node 的 fetch 各发一次 FormData,按边界切得到 5 个 part,按空行粗暴切会切出 7 段。每一步都能单独跑,中文字段名、字段值里的空行、boundary 长度这些细节都有实测输出。
2026年-9月-20日
68 阅读
0 评论
全栈
2026-9-19
提字段最快的写法是 indexOf 手工切,不是正则
同一份 5 万行日志提取 level 和耗时字段,正则逐行 exec 4.1ms,indexOf 手工切 3.1ms,split 空格 5.3ms 还切错了。位运算计数和普通布尔计数打成平手,全文围着这一张数据表展开。
2026年-9月-19日
94 阅读
0 评论
全栈
1
2