2013-03-07 98 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