이름만 보고 "Cloudflare Automatic HTTPS Rewrites"가 무엇을 하는지 오해할 수 있다고 생각합니다. Cloudflare에는 두 가지 기능이 있습니다:
- "Always Use HTTPS"는 모든 일반 HTTP 요청을 HTTPS로 리디렉션하며, 이는 Discourse의
force_https와 동일한 동작을 합니다. 이전에는 이 두 기능이 모두 활성화되어 있었으며, HTTPS가 문제와 무관한지, 또는 Discourse 페이지의 끝없는 로딩과 멈추는curl요청과 관련이 있는지 테스트하기 위해 이 두 기능을 모두 비활성화했습니다. 이 조치로 문제가 완벽하게 해결되었지만, 이는 HTTPS 요청에 대해서도 마찬가지였으며, 단순히 같은 시점에 "Cloudflare Automatic HTTPS Rewrites"를 비활성화했기 때문이었습니다. - "Cloudflare Automatic HTTPS Rewrites"는 HTML, CSS, JavaScript 문서 내의 모든 내장된 일반 HTTP URL을 HTTPS 버전으로 교체합니다. 이는 Cloudflare가 해당 호스트가 HTTPS를 통해 접근 가능하다고 판단하는 경우(HSTS 사전 로드 목록 등 기준)에만 적용됩니다. 이 기능은 혼합 콘텐츠(mixed content) 경고 발생을 방지하기 위한 것입니다.
Cloudflare, 호스트 프록시 또는 Discourse에서 HTTPS를 강제하거나 강제하지 않는 것은 중요하지 않습니다. 실제 문제를 일으킨 것은 호스트 프록시의 mod_sed 필터와 Cloudflare의 내장된 일반 HTTP 수정이 결합된 것이었습니다. 즉, 문서 내용이 두 단계의 필터를 통과한 것입니다. 문제는 실제 콘텐츠가 변경된 것이 아니라(우리 사이트에는 혼합 콘텐츠가 없으므로 "Cloudflare Automatic HTTPS Rewrites"는 문서 본문을 실제로 변경하지 않습니다) 아마도 청크(chunk), 버퍼 또는 타이밍과 관련이 있을 것입니다.