form-urlencoded與multipart/form-data

form元素的encType屬性,用來指定數據的編碼格式,常用的有三種:
1.application/x-www-form-urlencoded:通常簡寫為form-urlencoded:表單數據被編碼為鍵值對(key/value),多個數據用&分開(name=myName&password=myPassword);
2.multipart/form-data:multipart表示的意思是單個消息頭包含多個消息體的解決方案。multipart媒體類型對發送非文本的各媒體類型是有用的。一般用于多文件上傳.
3 text/plain:表單數據以純文本形式進行編碼.

action為get時

當action為get時候,客戶端把將表單數據編碼為
(name1=value1&name2=value2...),然后把這個字符串append到url后面,用?分隔。

action為post時

我們知道,HTTP 協議是以 ASCII 碼傳輸,建立在 TCP/IP 協議之上的應用層規范。規范把 HTTP 請求分為三個部分:狀態行、請求頭、消息主體。

協議規定 POST 提交的數據必須放在消息主體(entity-body)中,但協議并沒有規定數據必須使用什么編碼方式。實際上,開發者完全可以自己決定消息主體的格式,只要最后發送的 HTTP 請求滿足上面的格式就可以。

但是,數據發送出去,還要服務端解析成功才有意義。一般服務端語言如 php、python 等,以及它們的 framework,都內置了自動解析常見數據格式的功能。服務端通常是根據請求頭(headers)中的 Content-Type 字段來獲知請求中的消息主體是用何種方式編碼,再對主體進行解析。所以說到 POST 提交數據方案,包含了 Content-Type 和消息主體編碼方式兩部分。

當使用post的方式的時候.如果不設置 Type= file 屬性,那么默認以 application/x-www-form-urlencoded 方式提交數據.
如果設置Type =file,就要使用multipart/form-data,瀏覽器會把整個表單以控件為單位分割,并為每個部分加上Content-Disposition(form-data或者file),Content-Type(默認為text/plain),name(控件name)等信息,并加上分割符(boundary).

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容