Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Remove content-length header to resolve multipart/form-data request body mismatch issue #364

Merged
merged 2 commits into from
Dec 19, 2024

Conversation

llkkk
Copy link
Contributor

@llkkk llkkk commented Dec 19, 2024

问题现象:

在重放 multipart/form-data 请求时,由于不同工具生成的请求体内容、分隔符和元数据存在差异,导致 Content-Length 计算不一致,进而引发 too many bytes written 错误。

问题原理:

multipart/form-data 请求体的结构复杂,包含分隔符、字段元数据和字段值。不同工具(如浏览器、Postman、编程库)在生成请求体时,可能会使用不同的分隔符、换行符或元数据格式,导致请求体的实际字节长度与 Content-Length 不匹配。

修改方式:

FormDataHttpRequestBuilderbuildRequestContent 方法中,移除请求头中的 content-length,避免手动设置 Content-Length 导致的不一致问题。Spring 框架会自动计算并设置正确的 Content-Length


修改内容:

  • 移除 HttpHeaders 中的 content-length,确保请求体长度由框架自动管理。

测试结果:

  • 修改后,重放 multipart/form-data 请求不再出现 too many bytes written 错误。

@QizhengMo
Copy link
Collaborator

这个问题实际上是由于我们最近升级了 spring,它restTemplate 底层实现有变更导致的。
具体可以看spring-projects/spring-framework#31902

所以不仅仅是 formdata 会出现 content-length 不一致的情况,其他 http 请求也可能会有类似异常,所以这个 pr建议在 AbstractHttpRequestBuilder 中尝试 remove content-length。
建议使用HttpHeaders.CONTENT_LENGTH 常量

@llkkk
Copy link
Contributor Author

llkkk commented Dec 19, 2024

这个问题实际上是由于我们最近升级了 spring,它restTemplate 底层实现有变更导致的。 具体可以看spring-projects/spring-framework#31902

所以不仅仅是 formdata 会出现 content-length 不一致的情况,其他 http 请求也可能会有类似异常,所以这个 pr建议在 AbstractHttpRequestBuilder 中尝试 remove content-length。 建议使用HttpHeaders.CONTENT_LENGTH 常量

已修改

@QizhengMo QizhengMo merged commit f38b6a0 into arextest:main Dec 19, 2024
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants