http - MIME ParseMediaType 在多部分边界上失败

标签 http go mime-types

我是一个接受多部分/表单数据请求的 Golang api。但是,对于某些客户端,它无法解析表单,因为它不喜欢客户端使用的边界。

来自客户端的 header 是:

Content-Type:[multipart/form-data; boundary================1648430772==]

我已将其缩小到 mime 包中的 ParseMediaType 函数。

如果我调用:

bad := "multipart/form-data; boundary=1650458473"
d, params, err := mime.ParseMediaType(v)
if err != nil {
    fmt.Println("err", err)
}
fmt.Println(d, params)

我收到错误:mime:媒体参数无效

请注意,如果我使用

multipart/form-data; boundary=3fc88aad6d1341a4921fd5ac9efe607c

成功没问题。

根据https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html规范,在我看来这些都是边界的有效字符。

这是 Go mime 库中的错误吗?或者这真的是一个无效的边界?

最佳答案

您链接到的 rfc 包含边界和多部分正文的 BNF,它不包含 Content-Type Header Field 的 BNF .因此,虽然边界中的 = 很好,但在 Content-Type header 的 parameter value 中就不行了。至少没有被引用。

因此,要修复您的第一个示例,请将 Content-Type 更改为:

多部分/表单数据; boundary="===============1648430772=="

https://play.golang.org/p/3Iuk_ACZaQ

你的第二个例子multipart/form-data; boundary=1650458473 似乎工作正常。

https://play.golang.org/p/xJWwBa_QiP

关于http - MIME ParseMediaType 在多部分边界上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43527820/

相关文章:

ios - 如何使用 Swift 从 iOS 中的 mimetype 获取文件扩展名

Tornado 未正确返回 HTTP 状态消息

java - http服务器和客户端实现head和get方法

go - 如何遍历命令行参数并收集标志后的剩余内容?

javascript - 上传之前使用 FileReader javascript 检查图像 MIME 类型

html - 被视为图像资源的 CSS 文件

python - python将使用哪些端口发送html请求?使用 urllib 或 urllib2

rest - 如何处理REST API中新对象属性的引入

go - 在go中读取文本文件中的随机行

mysql - golang gin gorm插入并设置primary_key但primary_key为空