form元素的encType屬性,用來指定數(shù)據(jù)的編碼格式,常用的有三種:
1.application/x-www-form-urlencoded:通常簡寫為form-urlencoded:表單數(shù)據(jù)被編碼為鍵值對(key/value),多個數(shù)據(jù)用&分開(name=myName&password=myPassword);
2.multipart/form-data:multipart表示的意思是單個消息頭包含多個消息體的解決方案镣隶。multipart媒體類型對發(fā)送非文本的各媒體類型是有用的。一般用于多文件上傳.
3 text/plain:表單數(shù)據(jù)以純文本形式進行編碼.
action為get時
當action為get時候,客戶端把將表單數(shù)據(jù)編碼為
(name1=value1&name2=value2...),然后把這個字符串a(chǎn)ppend到url后面,用?分隔肌蜻。
action為post時
我們知道,HTTP 協(xié)議是以 ASCII 碼傳輸,建立在 TCP/IP 協(xié)議之上的應(yīng)用層規(guī)范市殷。規(guī)范把 HTTP 請求分為三個部分:狀態(tài)行、請求頭刹衫、消息主體醋寝。
協(xié)議規(guī)定 POST 提交的數(shù)據(jù)必須放在消息主體(entity-body)中,但協(xié)議并沒有規(guī)定數(shù)據(jù)必須使用什么編碼方式带迟。實際上音羞,開發(fā)者完全可以自己決定消息主體的格式,只要最后發(fā)送的 HTTP 請求滿足上面的格式就可以仓犬。
但是嗅绰,數(shù)據(jù)發(fā)送出去,還要服務(wù)端解析成功才有意義搀继。一般服務(wù)端語言如 php窘面、python 等,以及它們的 framework叽躯,都內(nèi)置了自動解析常見數(shù)據(jù)格式的功能财边。服務(wù)端通常是根據(jù)請求頭(headers)中的 Content-Type 字段來獲知請求中的消息主體是用何種方式編碼,再對主體進行解析点骑。所以說到 POST 提交數(shù)據(jù)方案酣难,包含了 Content-Type 和消息主體編碼方式兩部分谍夭。
當使用post的方式的時候.如果不設(shè)置 Type= file 屬性,那么默認以 application/x-www-form-urlencoded 方式提交數(shù)據(jù).
如果設(shè)置Type =file,就要使用multipart/form-data,瀏覽器會把整個表單以控件為單位分割,并為每個部分加上Content-Disposition(form-data或者file),Content-Type(默認為text/plain),name(控件name)等信息憨募,并加上分割符(boundary).