Web、网络与安全
一个请求从域名解析、建立连接到收到响应,每一步都可能以不同的方式失败;浏览器又在这之上加了跨域、缓存这些自己的规则。这个专题按请求的路径组织:先学会判断请求停在了哪一步,再看连接、分帧与 DNS,然后是浏览器的跨域与缓存,最后是输出编码、SQL 注入与加密误用这几类安全问题的防御边界。
从哪里开始:先读请求失败时,先看它停在了哪一步,它给出了定位的顺序;安全相关的三篇(输出编码、SQL 注入、加密误用)可以单独阅读。
文章
01请求失败时,先看它停在了哪一步DNS、路由、邻居解析、TCP 握手、HTTP 各自失败时,JDK HttpClient 与 Socket 看到的异常和耗时→02连接成功了,请求却一直没有响应握手由内核完成:应用不 accept 时 listen(5) 仍有 6 个连接成功、发送成功、读超时;队列长度被 somaxconn 封顶;Java 默认 50→03发了三条消息,对方一次全收到了TCP 是字节流:一次写不等于一次读;长度前缀与分隔符、把 GET 当成长度得到 1195725856、乱序响应的配对、超时后复用连接读到上一个请求的响应→04DNS 改了,为什么 Java 服务还在连旧地址JVM 默认缓存 30 秒而不看记录 TTL、失败结果缓存 10 秒、HttpURLConnection 一直复用旧连接→05接口用命令行能通,浏览器里报跨域跨源限制管的是读响应:简单请求照样到达接口并执行;JSON 触发预检;带 Cookie 时不能用星号;自定义响应头要显式暴露→06页面已发布,用户为什么还在用旧版本存储、新鲜度与条件验证分别控制;ETag、Vary、共享缓存,以及入口页面和哈希资源的发布策略→07同一份输入,放进 HTML 和脚本需要不同处理Thymeleaf 的文本、属性和脚本内联;URL 协议白名单;CSP nonce、HttpOnly 与 SameSite 分别约束什么→08查询用了参数绑定,排序和搜索仍然可能出错值绑定与结构白名单各管哪里;LIKE 通配符、IN 单个占位符与数据再次使用的边界→09用了 AES,密文还是被改了不写模式就是 ECB;GCM 随机数重复时不用密钥算出明文;CBC 改一个字节把 100 变成 900;快速哈希存口令;BCrypt 只看前 72 字节→10把 URI 模板编译成正则字面点号不转义、捕获组让变量错位、替换串里的 $ 与反斜杠、按具体程度排序候选、比较器契约→11React 19 的组件契约propTypes 移除后怎么写契约、判别联合表达互斥 props、RSC 的序列化边界→