4 回答

TA貢獻1785條經驗 獲得超4個贊
當您發出POST請求時,您必須以某種方式對構成請求主體的數據進行編碼。
HTML表單提供三種編碼方法。
application/x-www-form-urlencoded
(默認)multipart/form-data
text/plain
正在進行添加工作application/json
,但這已被放棄。
(使用除HTML表單提交之外的其他方式生成的HTTP請求,可以進行其他編碼。)
格式的細節對大多數開發人員來說無關緊要。重點是:
切勿使用
text/plain
。
在編寫客戶端代碼時:
使用
multipart/form-data
時,你的形式包括任何<input type="file">
元素否則,你可以使用
multipart/form-data
或application/x-www-form-urlencoded
,但application/x-www-form-urlencoded
效率會更高
在編寫服務器端代碼時:
使用預先編寫的表單處理庫
大多數(例如Perl CGI->param
或PHP的$_POST
超全局公開的那個)將為您處理差異。不要費心去解析服務器收到的原始輸入。
有時你會發現一個無法處理這兩種格式的庫。Node.js用于處理表單數據的最流行的庫是body-parser,它不能處理多部分請求(但是有文檔推薦一些替代方案可以)。
如果您正在編寫(或調試)用于解析或生成原始數據的庫,那么您需要開始擔心格式。您可能還想了解它的利益。
application/x-www-form-urlencoded
與URL末尾的查詢字符串大致相同。
multipart/form-data
更復雜但它允許整個文件包含在數據中??梢栽?a >HTML 4規范中找到結果的示例。
text/plain
由HTML 5引入并且僅用于調試 - 來自規范:它們不能被計算機可靠地解釋 - 我認為其他的與工具相結合(如大多數瀏覽器的開發人員工具中的Net選項卡)更好為了那個原因)。

TA貢獻1851條經驗 獲得超4個贊
enctype='multipart/form-data
是一種允許通過POST發送文件的編碼類型。很簡單,沒有這種編碼,文件無法通過POST發送。
如果要允許用戶通過表單上載文件,則必須使用此enctype。

TA貢獻1966條經驗 獲得超4個贊
提交表單時,您告訴瀏覽器通過HTTP協議發送網絡上的消息,該消息正確地包含在TCP / IP協議消息結構中。HTML頁面有一種向服務器發送數據的方法:使用<form>
s。
提交表單時,如果創建了HTTP請求并將其發送到服務器,則該消息將包含表單中的字段名稱和用戶填寫的值。這種傳輸可以發生POST
或GET
HTTP方法。
說明如何將表單發送到服務器
屬性enctype
只有在使用POST
方法時才有意義。指定后,它會指示瀏覽器通過以特定方式對其內容進行編碼來發送表單。來自MDN - 表格enctype:
當method屬性的值為post時,enctype是用于將表單提交給服務器的MIME內容類型。
application/x-www-form-urlencoded
:這是默認值。發送表單時,將收集所有名稱和值,并對最終字符串執行URL編碼。multipart/form-data
:字符不編碼。當表單具有文件上載控件時,這很重要。您希望發送文件二進制文件,這可確保不改變比特流。text/plain
:空格被轉換,但不再執行編碼。
安全
提交表單時,可能會出現一些安全問題,如RFC 7578第7節:多部分表單數據中所述 - 安全注意事項:
所有表單處理軟件都應該
靈敏地處理用戶提供的表單數據,因為它通常包含機密或個人
識別信息。在Web瀏覽器中廣泛使用表單“自動填充”功能; 這些可能用于欺騙用戶
在完成其他
無害任務時不知不覺地發送機密信息。multipart / form-data不提供任何
檢查完整性,確保機密性,避免用戶
混淆或其他安全功能的功能; 這些問題必須
通過表格填寫和表格數據解釋應用程序來解決。接收表單并處理表單的應用程序必須小心,不要將數據提供回不打算發送的請求表單處理站點。
在解釋Content-
Disposition頭字段的文件名時,重要的是不要無意中覆蓋
收件人文件空間中的文件。
如果您是開發人員,并且您的服務器將處理用戶提交的表單(可能最終包含敏感信息),則會引起您的注意。
- 4 回答
- 0 關注
- 1916 瀏覽
相關問題推薦
添加回答
舉報