Nginx - 具有自定义边界的多部分请求失败(CRLF)

Posted

技术标签:

【中文标题】Nginx - 具有自定义边界的多部分请求失败(CRLF)【英文标题】:Nginx - fails with multipart request with custom boundary having (CRLF) 【发布时间】:2017-09-14 18:28:39 【问题描述】:

nginx - 带有自定义边界 (CRLF) 的多部分请求失败,而从 RFC 来看,它是一个完全有效的有效负载。 示例有效载荷。 MIME 版本:1.0 内容类型:multipart/form-data; 边界=------%^TestBoundary^%------ 有多个文件。

起初,标题上的特殊字符导致边界被跳过传递到后端,添加了 ignore_invalid_headers 关闭。现在我看到传递给后端的内容类型标头,但添加了一个臭名昭著的“:”。

多部分/表单数据;边界=------%^TestBoundary^%------:

知道是什么原因造成的吗?在传递到后端之前如何在 nginx 上修复它?

【问题讨论】:

注意 Content-Type: multipart/form-data 之间有一个 \r\n\t;和边界= ...这是导致问题的原因,否则它可以正常工作。但它在 RFC (w3.org/Protocols/rfc1341/7_2_Multipart.html) 之前完全没问题 【参考方案1】:

这是一个已知错误,很可能是您的问题,其中“边界”部分使用 CRLF 和 TAB 附加到 Content-Type 字符串: https://forum.nginx.org/read.php?29,192093,192102#msg-192102

如果您无法在代码中解决此问题,那么您需要使用 HAProxy 或类似的方法通过将 CRLF + TAB 替换为 LWS 来解决此问题(请参阅此 @ 中第 1.2.2 节底部的“重要说明”) 987654322@)

【讨论】:

以上是关于Nginx - 具有自定义边界的多部分请求失败(CRLF)的主要内容,如果未能解决你的问题,请参考以下文章

用于匹配单词的 javascript 正则表达式模式,具有自定义单词边界

动画边界更改时具有 CALayer 有线效果的自定义视图

动画边界更改时具有 CALayer 有线效果的自定义视图

当 docker-compose 的一部分时,自定义 nginx 容器立即退出

Angular 材料 11:具有外观轮廓的 mat-form-field 以在整个项目中具有自定义的边界半径

09 nginx 中 upstream max_conns 配置为 1, 导致的一部分静态资源请求成功, 一部分静态资源请求失败