“multipart/form-data”HTTP 请求中的“utf-8”字符集会更改什么?

What does `utf-8` charset change in a `multipart/form-data` HTTP request?

提问人:David Refoua 提问时间:9/5/2017 最后编辑:David Refoua 更新时间:8/23/2023 访问量:10210

问:

在尝试将二进制文件上传到 Web 服务器时,我观察到通过将标头设置为带有 present 的值,POST 请求数据完整性会失败。Content-Typecharset="utf-8"

Chrome 似乎在同时执行文件上传 POST 请求时省略了标题和正文中的所有属性。charset

但是,如果包含该属性,则某些 Web 服务器会正确满足请求。charset="utf-8"

工作示例:

POST /upload.php HTTP/1.1
Content-Type: multipart/form-data; boundary=----FormBoundary

------FormBoundary
Content-Disposition: form-data; name="fileupload"; filename="data.bin"
Content-Type: application/octet-stream

------FormBoundary--

HTTP/1.1 200 OK

The file was received successfully.

失败示例:

POST /upload.php HTTP/1.1
Content-type: multipart/form-data; charset="utf-8"; boundary=----FormBoundary

------FormBoundary
Content-Disposition: form-data; name="fileupload"; filename="data.bin"
Content-Type: application/octet-stream

------FormBoundary--

HTTP/1.1 200 OK

The uploaded file seems to be broken.

添加似乎使某些 Web 服务器无法正确解码上传的数据,而它似乎不会影响其他 Web 服务器中的进程。charset="utf-8"

请注意,在这两种情况下,包括类型后面的字符集不会影响任何事情,我更关注类型后面的添加。application/octet-streammultipart/form-data

当 Unicode 字符集标志出现在 multipart 类型之后时,服务器中会发生什么情况?

HTTP POST 文件上传 编码 UTF-8

评论

4赞 DaSourcerer 9/5/2017
有趣的问题。媒体类型注册没有预见到字符集参数。因此,合规实现应该忽略它。
3赞 shaochuancs 9/5/2017
问得好。虽然默认编码应定义为隐藏字段或元素的属性。详情请查看 tools.ietf.org/html/rfc7578#section-5.1.2multipart/form-data_charset_<form>accept-charset

答: 暂无答案