2013-03-07 20 views
3

我喜欢这个主题的问答配对:多部分请求中的“部分”是什么?

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

我觉得缺少的是如何在浏览器/服务器觉得一个正常的表单提交和multipart岗位之间的差异。因为作为用户,我看到浏览器如何反应表单提交方面没有任何区别,并且作为想要的web开发人员,我整体接收帖子(例如文件),而不是“部分”...

一个很好的答案可以解释部件多部件究竟是什么?在你提到的问题提到

回答

1

好喜欢,有两种方式编码格式的post可发送:application/x-www-form-urlencodedmultipart/form-data

他们两人都会发送post请求的正文。而不是像get那样通过url本身传递。

这里既是一个例子: http://www.htmlcodetutorial.com/forms/form_enctype.html

你可以说part是参数名在get请求的urlencoded的形式等表现。

urlencoded进行:realname= 部分:Content-Disposition: form-data; name="realname"

的不同部分由在头所限定的边界分开: Content-type: multipart/form-data; boundary=---------------------------7cd1d6371ec

EDIT 床头在编码的大部分的差重要的是,与multipart/form-data客户有可能添加额外的信息到键/值p空气就像价值的类型(例如, Content-Type: image/jpeg)或文件名。有了这些信息,服务器可以针对不同类型的值执行某些操作。

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

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

+0

因此浏览器以相同的方式发送这两种形式的编码?不会发生文件分裂吗?我一直认为*部分*表示文件被拆分并单独发送。 – Xlaudius 2013-03-07 11:43:14

+0

两者都发送一个请求。该请求可能会另外被分块编码。但它仍然是一个要求。但是没有发生文件分裂的情况,服务器会给你一部分文件。 – 2013-03-07 11:45:58