我正在进行不受支持的 Docker 安装。
这意味着在不同的端口上运行 Ember CLI 的容器,并使用共享卷,并通过反向代理到 Rails 服务器,正如预期的那样。
不幸的是,对于所有 .css 资源,当我通过 HTTPS 并通过 Nginx 反向代理访问时,都会收到来自 curl 和浏览器的“网关错误 502”。
看起来 Ember CLI 在 Rails 服务器已经添加了 transfer-encoding: chunked 的情况下,又 添加 了 Content-Length 标头。
(我可以访问不同的端口来检查来自 Rails 和 Ember 的响应)
我相信这并没有正式违反 HTTP 1.1 协议标准(它应该被忽略):
“如果收到的消息同时包含 Transfer-Encoding 标头字段和 Content-Length 标头字段,则后者必须被忽略。”
……但这确实会导致 Nginx 拒绝服务并报告 502,并且不提供资源,所以这无关紧要。
我可以直接通过 curl 将 CSS 文件浏览到本地主机上的容器,但在 Nginx 层面,它无法正常工作:
upstream 在读取来自上游的响应头时同时发送了“Content-Length”和“Transfer-Encoding”标头
有人有什么办法可以阻止 Ember CLI 这样做,或者有什么变通方法吗?我很惊讶这在标准安装中不是一个问题?(因为通信链应该非常相似)。
Discourse 版本是 2.8.9
Docker 中的标头(为简洁起见,略有删减):
< content-transfer-encoding: binary
< content-type: text/css; charset=utf-8
< referrer-policy: strict-origin-when-cross-origin
< set-cookie: __profilin=p%3Dt; path=/forum; HttpOnly; SameSite=Lax
< **transfer-encoding: chunked**
< Vary: Accept, Accept-Encoding
< x-content-type-options: nosniff
< x-discourse-route: stylesheets/show
< x-download-options: noopen
< x-frame-options: SAMEORIGIN
< x-permitted-cross-domain-policies: none
< x-xss-protection: 0
< content-encoding: null
< **Content-Length: 3055**