摘要:格式支持比鍵值對(duì)復(fù)雜得多的結(jié)構(gòu)化數(shù)據(jù),這一點(diǎn)也很有用。例如下面這段代碼最終發(fā)送的請(qǐng)求是這種方案,可以方便的提交復(fù)雜的結(jié)構(gòu)化數(shù)據(jù),特別適合的接口。
簡(jiǎn)介
form的enctype屬性為編碼方式,常用有兩種:application/x-www-form-urlencoded和multipart/form-data,默認(rèn)為application/x-www-form-urlencoded。
當(dāng)action為get時(shí)候,瀏覽器用x-www-form-urlencoded的編碼方式把form數(shù)據(jù)轉(zhuǎn)換成一個(gè)字串(name1=value1&name2=value2...),然后把這個(gè)字串a(chǎn)ppend到url后面,用?分割,加載這個(gè)新的url。
當(dāng)action為post時(shí)候,瀏覽器把form數(shù)據(jù)封裝到http body中,然后發(fā)送到server。如果沒(méi)有type=file的控件,用默認(rèn)的application/x-www-form-urlencoded就可以了。 但是如果有type=file的話,就要用到multipart/form-data了。瀏覽器會(huì)把整個(gè)表單以控件為單位分割,并為每個(gè)部分加上Content-Disposition(form-data或者file),Content-Type(默認(rèn)為text/plain),name(控件name)等信息,并加上分割符(boundary)。
根據(jù)查找的資料得到如下總結(jié):
application/x-www-form-urlencoded: 窗體數(shù)據(jù)被編碼為名稱(chēng)/值對(duì)。這是標(biāo)準(zhǔn)的編碼格式。
multipart/form-data: 窗體數(shù)據(jù)被編碼為一條消息,頁(yè)上的每個(gè)控件對(duì)應(yīng)消息中的一個(gè)部分。
text/plain: 窗體數(shù)據(jù)以純文本形式進(jìn)行編碼,其中不含任何控件或格式字符。
HTTP/1.1 協(xié)議規(guī)定的 HTTP 請(qǐng)求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 這幾種。其中 POST 一般用來(lái)向服務(wù)端提交數(shù)據(jù),本文主要討論 POST 提交數(shù)據(jù)的幾種方式。
我們知道,HTTP 協(xié)議是以 ASCII 碼傳輸,建立在 TCP/IP 協(xié)議之上的應(yīng)用層規(guī)范。規(guī)范把 HTTP 請(qǐng)求分為三個(gè)部分:狀態(tài)行、請(qǐng)求頭、消息主體。類(lèi)似于下面這樣:
協(xié)議規(guī)定 POST 提交的數(shù)據(jù)必須放在消息主體(entity-body)中,但協(xié)議并沒(méi)有規(guī)定數(shù)據(jù)必須使用什么編碼方式。實(shí)際上,開(kāi)發(fā)者完全可以自己決定消息主體的格式,只要最后發(fā)送的 HTTP 請(qǐng)求滿足上面的格式就可以。
但是,數(shù)據(jù)發(fā)送出去,還要服務(wù)端解析成功才有意義。一般服務(wù)端語(yǔ)言如 php、python 等,以及它們的 framework,都內(nèi)置了自動(dòng)解析常見(jiàn)數(shù)據(jù)格式的功能。服務(wù)端通常是根據(jù)請(qǐng)求頭(headers)中的 Content-Type 字段來(lái)獲知請(qǐng)求中的消息主體是用何種方式編碼,再對(duì)主體進(jìn)行解析。所以說(shuō)到 POST 提交數(shù)據(jù)方案,包含了 Content-Type 和消息主體編碼方式兩部分。
是什么決定了表單的編碼?熟悉表單元素
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/89501.html
摘要:以下引用,摘自規(guī)范的章節(jié)這不就是我們?cè)诨卣{(diào)函數(shù)里判斷返回?cái)?shù)據(jù)的類(lèi)型,并且是在請(qǐng)求頭中的那個(gè)玩意兒?jiǎn)釠](méi)錯(cuò)就是它根據(jù)規(guī)范的基礎(chǔ)數(shù)據(jù)類(lèi)型的說(shuō)明,這個(gè)指定了連接資源的屬性,同時(shí)也是的那些媒體類(lèi)型。今天掰扯完了表單提交時(shí)的編碼類(lèi)型,以及它和的關(guān)系。 很早以前,當(dāng)還沒(méi)有前端這個(gè)概念的時(shí)候,我在寫(xiě)表單提交完全不去理會(huì)表單數(shù)據(jù)的編碼,在action屬性里寫(xiě)好目標(biāo)URL,剩下的啊交給瀏覽器吧~但是現(xiàn)在,...
摘要:每個(gè)表格均有若干行由標(biāo)簽定義,每行被分割為若干單元格由標(biāo)簽定義。字母指表格數(shù)據(jù),即數(shù)據(jù)單元格的內(nèi)容。數(shù)據(jù)單元格可以包含文本圖片列表段落表單水平線表格等等。表格最重要的目的是顯示表格類(lèi)數(shù)據(jù)。規(guī)定在提交表單時(shí)所用的方法默認(rèn)。 import socket def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STRE...
摘要:用于或元素時(shí),將提交指定的表單示例代碼只能上傳圖片只能上傳視頻使用的屬性,是一個(gè)類(lèi)型的值,或文件后綴名。在以前,要想改變表單元素外觀,需要通過(guò)其他標(biāo)簽來(lái)模擬。以下點(diǎn)到名的表單元素,還是可以照常使用的。 做為html中最為常見(jiàn),應(yīng)用最廣泛的標(biāo)簽之一,form常伴隨前端左右。了解更深,用的更順。 表單屬性 這個(gè)表單展示了form表單常用的屬性 屬性名 屬性值 ...
摘要:表單用于向服務(wù)器傳輸數(shù)據(jù)。屬性對(duì)象的屬性指定了一個(gè)事件句柄函數(shù)。標(biāo)簽的屬性應(yīng)當(dāng)與相關(guān)元素的屬性相同。詳情查閱請(qǐng)狠狠地點(diǎn)擊關(guān)于對(duì)象代表表單中的一個(gè)提交按鈕在表單提交之前,觸發(fā)事件句柄,并且一個(gè)句柄可以通過(guò)返回來(lái)取消表單提交。 系列文章 關(guān)于前端上傳文件全面基礎(chǔ)掃盲貼(零)關(guān)于前端上傳文件全面基礎(chǔ)掃盲貼(一) ----- XMLHttpRequest關(guān)于前端上傳文件全面基礎(chǔ)掃盲貼(二) -...
閱讀 1497·2021-09-24 10:26
閱讀 3806·2021-09-06 15:02
閱讀 737·2019-08-30 14:18
閱讀 689·2019-08-30 12:44
閱讀 3190·2019-08-30 10:48
閱讀 2023·2019-08-29 13:09
閱讀 2076·2019-08-29 11:30
閱讀 2391·2019-08-26 13:36