【问题标题】:When should we use HttpMultipartMode as 'STRICT'?我们什么时候应该使用 HttpMultipartMode 作为“STRICT”?
【发布时间】:2021-08-18 05:47:49
【问题描述】:

我正在使用 org.apache.http.entity.mime.MultipartEntityBuilder 在 SpringBoot 应用程序中使用 apache HttpClient 发送多部分表单数据。

最近,我看到了一个用例,其中一个请求给出了响应

415 Unsupported Media Type

在尝试调试问题时,我将 MultipartEntityBuilder 对象的 HttpMultipartMode 从 BrowserCompatible 更改为 Strict 。它开始给出预期的响应 200。

我尝试了很多搜索,但仍然无法完全理解更改 HttpMultipartMode 会产生什么影响。 有人可以帮我理解这个吗?

【问题讨论】:

    标签: java spring-boot httpclient multipartform-data


    【解决方案1】:

    您可以查看源代码以获取更多信息:

    https://www.javadoc.io/doc/org.apache.httpcomponents/httpmime/4.5.7/org/apache/http/entity/mime/HttpMultipartMode.html

    Strict 似乎遵循 RFC 标准,BrowerCompatible 不兼容

    当我遇到此类问题时,我通常会确保在 Spring 之外(即 Postman 或类似工具)测试我的请求,以了解标头的差异(通常不同的标头会在某种程度上成为问题)

    【讨论】:

    • 感谢@breakline 的回复。这里还有一个疑问,我们如何从邮递员那里知道它是以哪种模式发送的。由于该 api 是从邮递员那里获得的,具有相同的标头和其他配置。
    • Postman 也会自动添加自己的标题(您可以在标题部分取消选中此项)。如果所有标题都相同并且数据相同等,那么您将必须获得相同的最终结果(除非存在其他问题,例如代理)。您也可以尝试使用 curl,但这不像邮递员那样精简。我遇到过类似的问题,这是由 Postman 添加的额外标头引起的(在我的情况下,我的请求在 postman 中有效,但在 Android 应用中无效)
    【解决方案2】:

    想知道其他端代码,在实现 API(休息服务)时,是什么变化造成了这种差异。要使 API 严格模式,我必须在代码中进行哪些特定更改。

    【讨论】:

      猜你喜欢
      • 2021-09-07
      • 1970-01-01
      • 2011-07-04
      • 2017-09-13
      • 2021-12-29
      • 2011-07-17
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多