多部分请求中的“部分”是什么?

时间:2013-03-07 11:21:16

标签: html forms multipartform-data

我喜欢本主题中的问答配对:

What does enctype='multipart/form-data' mean?

我觉得缺少的是浏览器/服务器如何感受普通表单帖子和multipart帖子之间的区别。因为作为一个用户,我发现浏览器对表单提交的反应没有区别,作为一个想要的Web开发者,我收到了整个帖子(例如文件),而不是“部分”......

一个好的答案可以解释 multipart 部分究竟是什么?

1 个答案:

答案 0 :(得分:1)

与您的推荐问题中提到的一样,有两种方法可以对表单的post进行编码:application/x-www-form-urlencodedmultipart/form-data

它们都将在post请求的正文中发送。而不是与get一样,它与url本身一起传递。

这是两个例子: http://www.htmlcodetutorial.com/forms/form_enctype.html

您可以说partget请求的urlencoded格式中参数名称的另一种表示形式。

urlencoded: realname= part: Content-Disposition: form-data; name="realname"

不同的部分由标题中定义的边界分隔: Content-type: multipart/form-data; boundary=---------------------------7cd1d6371ec

修改 床边编码的差异最重要的是,使用multipart/form-data,客户端可以向键/值对添加其他信息,如值的类型(例如Content-Type: image/jpeg)或者文件名。有了这些信息,服务器就可以针对不同类型的值执行某些操作。

当您使用application/x-www-form-urlencoded时,无法以标准化方式为键/值对存储其他信息。

如果您要使用multipart/form-data请求提交文件,则必须使用post。这不是因为它不可能将文件作为url格式的base64编码值传递,而是因为urlencoding没有标准的方法告诉服务器它是文件而不是字符串。