第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

應(yīng)用程序/x-www-表單-urlencode還是多部分/表單-數(shù)據(jù)?

應(yīng)用程序/x-www-表單-urlencode還是多部分/表單-數(shù)據(jù)?

慕少森 2019-06-03 14:51:57
應(yīng)用程序/x-www-表單-urlencode還是多部分/表單-數(shù)據(jù)?在HTTP中,有兩種發(fā)布數(shù)據(jù)的方法:application/x-www-form-urlencoded和multipart/form-data..據(jù)我所知,大多數(shù)瀏覽器只能在以下情況下才能上傳文件multipart/form-data被利用了。在API上下文中使用其中一種編碼類型(不涉及瀏覽器)時,是否有其他指導(dǎo)?例如,這可能是基于:數(shù)據(jù)大小非ASCII字符的存在性(未編碼的)二進(jìn)制數(shù)據(jù)的存在需要傳輸其他數(shù)據(jù)(如文件名)到目前為止,我基本上沒有在網(wǎng)絡(luò)上找到關(guān)于使用不同內(nèi)容類型的正式指南。
查看完整描述

3 回答

?
交互式愛情

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個贊

TL;DR

摘要;如果要傳輸二進(jìn)制(非字母數(shù)字)數(shù)據(jù)(或相當(dāng)大的有效負(fù)載),請使用multipart/form-data..否則,使用application/x-www-form-urlencoded.


你提到的啞劇類型有兩種Content-Type用戶代理(瀏覽器)必須支持的HTTPPOST請求的頭。這兩種類型請求的目的是向服務(wù)器發(fā)送名稱/值對的列表。根據(jù)所傳輸數(shù)據(jù)的類型和數(shù)量,其中一種方法比另一種方法更有效。要理解其中的原因,你必須看看每個人都在做些什么。

application/x-www-form-urlencoded,發(fā)送給服務(wù)器的HTTP消息的主體本質(zhì)上是一個巨大的查詢字符串-名稱/值對由符號和(&),并且名稱與值由相等符號(=)。這方面的一個例子是:

MyVariableOne=ValueOne&MyVariableTwo=ValueTwo

根據(jù)規(guī)格:

[保留和]非字母數(shù)字字符替換為‘%hh’,一個百分比符號和兩個十六進(jìn)制數(shù)字,表示字符的ASCII代碼。

這意味著,對于我們的一個值中存在的每個非字母數(shù)字字節(jié),它將花費(fèi)三個字節(jié)來表示它。對于大型二進(jìn)制文件,將有效負(fù)載增加三倍將是非常低效的。

在那里multipart/form-data進(jìn)來。使用這種傳遞名稱/值對的方法,每對都表示為MIME消息中的“部件”(如其他答案所述)。各個部分由一個特定的字符串邊界分隔(特別選擇這個邊界字符串,使這個邊界字符串不會出現(xiàn)在任何“值”有效載荷中)。每個部分都有自己的一組MIME標(biāo)頭,如下所示Content-Type,特別是Content-Disposition,它可以賦予每個部分“名稱”。每個名稱/值對的值段是MIME消息的每個部分的有效負(fù)載。MIME規(guī)范在表示值有效負(fù)載時給了我們更多的選擇-我們可以選擇更有效的二進(jìn)制數(shù)據(jù)編碼來節(jié)省帶寬(例如,基本64甚至原始二進(jìn)制)。

為什么不使用multipart/form-data一直?簡而言之,字母數(shù)字值(和大多數(shù)Web表單一樣),添加所有MIME頭的開銷將大大超過更有效的二進(jìn)制編碼節(jié)省的費(fèi)用。


查看完整回答
反對 回復(fù) 2019-06-03
?
斯蒂芬大帝

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個贊

至少在這里讀第一段!

我知道這已經(jīng)晚了3年了,但馬特(接受)的答案是不完整的,最終會給你帶來麻煩。這里的關(guān)鍵是,如果你選擇使用multipart/form-data,邊界必須顯示在服務(wù)器最終接收的文件數(shù)據(jù)中。

這不是問題application/x-www-form-urlencoded因?yàn)闆]有邊界。x-www-form-urlencoded也可以隨時處理二進(jìn)制數(shù)據(jù),通過簡單的權(quán)宜之計(jì)將一個任意字節(jié)轉(zhuǎn)換為三個。7BIT字節(jié)。效率低下,但它有效(請注意,關(guān)于不能發(fā)送文件名和二進(jìn)制數(shù)據(jù)的注釋是不正確的;您只需將其作為另一個鍵/值對發(fā)送)。

與.有關(guān)的問題multipart/form-data邊界分隔符不能出現(xiàn)在文件數(shù)據(jù)中(請參見RFC 2388第5.2節(jié)還包括一個相當(dāng)站不住腳的借口,認(rèn)為沒有適當(dāng)?shù)木酆螹IME類型可以避免這個問題)。

所以,乍一看,multipart/form-data毫無價值任何文件上傳,二進(jìn)制或其他。如果你沒有正確選擇你的邊界,那么你將要最終會出現(xiàn)問題,無論您是發(fā)送純文本還是原始二進(jìn)制文件-服務(wù)器將在錯誤的位置找到一個邊界,您的文件將被截?cái)?,或者POST將失敗。

關(guān)鍵是選擇編碼和邊界,以便所選邊界字符不能出現(xiàn)在編碼輸出中。一個簡單的解決方案是使用base64(做使用原始二進(jìn)制)。在……里面基準(zhǔn)643個任意字節(jié)被編碼為4個7位字符,其中輸出字符集為[A-Za-z0-9+/=](即字母數(shù)字、‘+’、‘/’或‘=’)。=是一種特例,并且只能在編碼輸出的末尾以單一形式出現(xiàn)。=或者雙份==..現(xiàn)在,選擇您的邊界作為一個7位的ASCII字符串,它不能出現(xiàn)在base64輸出。您在網(wǎng)絡(luò)上看到的許多選擇都失敗了-mdn表單。博士例如,在發(fā)送二進(jìn)制數(shù)據(jù)時,使用“BLOB”作為邊界-這不太好。然而,就像“!BLOB!”永遠(yuǎn)不會出現(xiàn)在base64輸出。


查看完整回答
反對 回復(fù) 2019-06-03
  • 3 回答
  • 0 關(guān)注
  • 821 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號