我猜想仅从“Cloudflare 自动 HTTPS 重写”这个名称就可以产生误解。Cloudflare 有 2 个功能:
- “始终使用 HTTPS”会将所有纯 HTTP 请求重定向到 HTTPS,就像 Discourse 中的
force_https一样。两者之前都已启用,我禁用了两者以测试 HTTPS 是否与问题或 Discourse 的无尽加载页面和挂起的curl请求有关。这效果非常好,甚至解决了 HTTPS 请求的整个问题,但这仅仅是因为我在同一次操作中禁用了“Cloudflare 自动 HTTPS 重写”。 - “Cloudflare 自动 HTTPS 重写”会修改 HTML、CSS 和 JavaScript 文档,用 HTTPS 变体替换所有嵌入的纯 HTTP URL,Cloudflare 认为主机可以通过 HTTPS 访问(基于 HSTS 预加载列表等)。这是为了避免混合内容警告。
在 Cloudflare、主机代理或 Discourse 中强制或不强制 HTTPS 都没有关系。导致问题的是主机代理中的 mod_sed 过滤器与 Cloudflare 嵌入的纯 HTTP 编辑的组合。因此,文档内容通过了两个阶段的过滤器。问题不在于实际内容更改(我们的网站上没有任何混合内容,“Cloudflare 自动 HTTPS 重写”因此实际上并未更改文档正文),而可能与块、缓冲区或计时有关。