参考资料

  1. 针对“流氓”爬虫,核心策略是 “拒绝礼貌,直接开火”。robots.txt 对它们形同虚设,必须在 Nginx 或 ESA 层面主动拦截。
  2. 在 ESA 配置了“自定义缓存标签名称”(比如改成 ESA-Cache-Tag),源站就必须同步改用这个新标头名。
  3. Zstd 相比 Gzip 和 Brotli,在性能上的突出表现确实是“速度与压缩率的平衡”
  4. “边缘清洗 + 源站隐身 + Nginx 兜底” 三层纵深
  5. 阿里云 ESA(边缘安全加速)的“托管 DCV”功能。
  6. “回源协议和端口”决定了 ESA 边缘节点向你的源站服务器发起请求时,用 HTTP 还是 HTTPS,以及连到哪个端口。
  7. 强制校验源站服务器返回的 SSL/TLS 证书是否合法有效
  8. 错误 net::err_blocked_by_response 通常表示浏览器收到了来自服务器的响应,但拒绝了它

开启 HSTS 后,可以减少第一次访问被劫持的风险,ESA 将响应 HSTS 头部:Strict-Transport-Security。

你的理解基本正确,但有一点需要补充:HSTS 本身并不能完全消除“第一次访问被劫持的风险”。它主要保护的是第一次成功建立 HTTPS 连接之后的所有后续访问。

第一次访问的漏洞依然存在

在客户端第一次访问你的站点、且尚未收到 HSTS 头部之前,如果它通过 http:// 发起连接,这次请求仍然是明文的。攻击者可以在这一步拦截请求,实施 SSL 剥离攻击。

ESA 文档也确认了这一点:客户端首次访问时 HSTS 策略尚未同步,如果使用 HTTP,ESA 节点会强制重定向到 HTTPS,但这第一次重定向过程本身仍处于风险窗口内。

HSTS 实际封堵的是什么

一旦浏览器成功通过 HTTPS 收到过一次 Strict-Transport-Security 头部,它就会在本地记住规则:在 max-age 指定的时间内,对该域名的所有请求在发出前就自动改用 HTTPS。攻击者再也无法在中间把连接降级为明文,因为浏览器根本不会再发出 HTTP 请求。

所以准确的说法是:HSTS 消除了“后续访问被劫持的风险”,第一次访问的窗口需要通过其他手段弥补。

弥补第一次访问窗口的方法

要覆盖第一次访问,需要申请加入浏览器的 HSTS Preload 列表。域名被预先内置到浏览器中后,浏览器从第一次访问起就直接强制 HTTPS,无需等待服务器下发头部。

Preload 的申请条件很严格:max-age 至少一年(31536000 秒),必须包含 includeSubDomains 和 preload 指令,且所有子域名都必须支持 HTTPS。一旦加入,移除可能需要数月时间,所以提交前需要确保全站子域名都已就绪。

作者:王壹杰
时间:2026-09-28 11:10:57
来源:https://yun.ciilii.com/