在尝试将二进制文件上传到Web服务器时,我发现通过将Content-Type
标头设置为存在charset="utf-8"
的值,POST请求数据完整性将失败。
在执行文件上传POST请求时,Chrome似乎省略了标题和正文中的所有charset
属性。
但是,如果包含charset="utf-8"
属性,某些Web服务器会正确满足请求。
工作示例:
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.
添加charset="utf-8"
似乎会使某些网络服务器无法正确解码上传的数据,但它似乎不会影响其他网络服务器中的进程。
请注意,在这两种情况下,包括application/octet-stream
类型之后的字符集都不会影响任何内容,我更关注multipart/form-data
类型之后的添加。
在multipart类型之后出现unicode charset标志时,服务器和/或操作系统会发生什么?