【每日一題】說說開發中常用的幾種 Content-Type?

2021-12-09 前端印記
Content-Type 的定義

HTTP 的實體首部欄位,用於說明請求或返回的消息主體是何種方式編碼,在 request header(請求頭) 和 response header(響應頭) 裡存在。

幾種常見的類型:



application/x-www-form-urlencoded

瀏覽器的原生 form 表單,如果不設置屬性,那麼最終就會以application/x-www-form-urlencoded方式提交數據,請求如上面的形式:

POST http://www.baidu.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=utf-8

title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3

這種方式提交的數據放在 body 裡面,數據按照key1=val1&key2=val2的方式進行編碼,key 和 val 都進行了 url 編碼

multipart/form-data

該種方式也是一種常見的 POST 提交方式,通常表單上傳文件時使用這種方式

使用表單上傳時,必須讓 form 的 enctype 等於這個值

<form action="/" method="post" enctype="multipart/form-data">
  <input type="text" name="description" value="some text" />
  <input type="file" name="myFile" />
  <button type="submit">Submit</button>
</form>

在請求頭這裡看起來是這樣:

POST /foo HTTP/1.1
Content-Length: 68137
Content-Type: multipart/form-data; boundary=--974767299852498929531610575

--974767299852498929531610575
Content-Disposition: form-data; name="description"

some text
--974767299852498929531610575
Content-Disposition: form-data; name="myFile"; filename="foo.txt"
Content-Type: text/plain

(content of the uploaded file foo.txt)
--974767299852498929531610575--

稍微分析下:

首先生成一個 boundary 用於分割不同的欄位,為了避免與正文內容重複,boundary 很長很複雜

然後 content-Type 裡指明了數據是以 multipart/from-data 來編碼,本次請求的 boundary 是什麼內容

消息主體裡按照欄位個數又分為多個結構類似的部分,每部分都是以 --boundary開始,緊接著是內容描述信息,然後是回車,最後是欄位具體內容(文本或二進位)

如果傳輸的是文件,還要包含文件名和文件類型信息。消息主體最後以--boundary-- 標識結束。

關於 multipart/form-data 的詳細定義,可前往 rfc1867 查看

application/json

application/json 作為響應頭,現在越來越多的人把其作為請求頭,用來告訴伺服器消息主體是序列化後的 json 字符串。請求類似下面形式

POST http://www.example.com HTTP/1.1
Content-Type: application/json;charset=utf-8

{"title":"test","sub":[1,2,3]}

這種方案,可以方便的提交複雜的結構化數據,特別適合 RESTful 的接口。各大抓包工具如 chrome 自帶的開發者工具、Firebug、Fiddler,都以樹形結構展示 JSON 數據,非常友好。

text/xml

該種方式主要用來提交 XML 格式的數據,請求形式如下:

POST http://www.example.com HTTP/1.1
Content-Type: text/xml

<?xml version="1.0"?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param>
<value><i4>41</i4></value>
</param>
</params>
</methodCall>

顯然在 API 方面,現在 JSON 大有取代 XML 的意思,但是 XML 依然有其不可代替的領域。


相關焦點

  • HTTP請求中,幾種常見的Content-Type類型解析
    翻譯過來就是告訴我們,提交數據時需要通過表單enctype屬性(規定在發送到伺服器之前應該如何對表單數據進行編碼)根據content type進行編碼。並且,如果是GET,用」?」連接,編碼方式為「application/x-www-form-urlencoded」;如果是POST則根據enctype屬性確定content type,默認也為」application/x-www-form-urlencoded」。
  • get、post 請求中常見 content-type 請求頭以及 nodeJs 解析請求參數
    本文主要討論 POST 提交數據的幾種方式及GET請求HTTP 協議數據格式HTTP 協議是以 ASCII 碼傳輸,建立在 TCP/IP 協議之上的應用層規範。規範把 HTTP 請求分為三個部分:狀態行、請求頭、消息主體。
  • 每日一題---課外探究電阻與溫度的關係
    (掃碼可下載)2020中考物理各地試題彙編每日一題---比熱容知識點初中物理知識點常用常量及換算冒氣的比不冒氣的食物一定溫度高嗎?每日一題---電路圖連接、互畫你能用物理知識解釋--人感冒為什麼會流鼻涕嗎?
  • 如何為 HttpClient 請求設置 Content-Type 標頭?
    client_id&timstamp&rd=12345&sign=***&method=hmaccontent-type: application/jsonpayload: { "token":"AA2917B0-C23D-40AB-A43A-4C4B61CC7C74"}平臺顯示 :
  • 我開發常用的類庫、Linux命令、SQL相關(一)
    趁著國慶節, 系統的整理了自己在開發的時候比較常用的類庫、Linux命令。有時候,「虛驚一場」這四個字是人世間最美好的成語,比起什麼興高採烈,五彩繽紛,一帆風順都要美好百倍。你可懂什麼叫失去。這些時間來,更覺如此。願悲傷恐懼能夠過去,事外之人更懂珍惜。
  • 每日一練 | 20道常考Python面試題大總結
    當時,面試官根據他在簡歷中所寫的技術,面試題出的範圍大致如下:· 數據類型有幾種、有什麼區別· 進程、線程、協程的定義及區別· 深淺拷貝的區別· 常用開發模式· 函數式編程、對象式編程· 閉包、裝飾器· 垃圾回收機制· linux常用命令,舉例說明根據該網友的經驗,以上是面試題的常考範圍,如果能答出來大部分內容,說明技術水平基本沒太大問題。
  • 每日一題丨天下斷無易處之境遇;人間哪有空閒的光陰.
    下圖中,A為「正常年份南太平洋部分海區水溫分布圖」,B為「厄爾尼諾年的南太平洋部分海區水溫分布圖」,讀圖完成下列問題。(1)完成A、B兩圖中的大氣環流圖(用箭頭在線段上標繪)。(2)正常年份,澳大利亞東部海域降水較      (多、少),海面水溫較、    (高、低),原因是      。
  • 常用的幾款前端開發編輯器對比
    常用插件基本上都在 Atom Packages 首頁中能找到,選擇排名前列的就可以。GitHub打造,後臺過硬。開發維護團隊強大,且是開源項目,修復bug速度快,生態圈成長速度快。支持各種程式語言的代碼高亮和代碼補全(部分需要插件支持)。原生Git支持。在編輯器的右下角或者菜單樹中能直觀的看到自己編輯代碼的狀態。
  • 分享前端開發常用代碼片段
    預加載圖像如果你的網頁中需要使用大量初始不可見的(例如,懸停的)圖像,那麼可以預加載這些圖像。六、滑鼠滾輪$('#content').on("mousewheel DOMMouseScroll", function (event) {     // chrome
  • 分享 前端開發 常用代碼片段
    >如果你的網頁中需要使用大量初始不可見的(例如,懸停的)圖像,那麼可以預加載這些圖像。六、滑鼠滾輪$('#content').on("mousewheel DOMMouseScroll", function (event) {     // chrome
  • 每日一題 | 「炸彈氣旋」
    據此完成8~9題。「炸彈氣旋」是在冷氣團與暖氣團相遇時形成的氣旋,其中心氣壓在 24  h內下降超過 24  hPa。該類氣旋爆發強、發展快,會帶來強烈的暴風雪和降溫,威力如同炸彈。2018 年 1 月 3 日,名為格雷森的「炸彈氣旋」襲擊了美國東部。下圖為美國東部 1 月 3 日降雪量分布圖。據此完成8~9題。
  • 嵌入式開發中那些常用的工具軟體
    Keil主要針對市面MCU絕大部分MCU,從8位到32位的一款IDE,可以參看我的文章《Keil介紹》。http://www.keil.comKeil針對不同MCU,進行了劃分,目前有4種工具:Keil C51、 C166、 C251、MDK-ARM。
  • 直觀的機械動圖,說說擒縱機構的機械原理!
    點擊上方「cax360」,機械乾貨送上門【每日學機械】第46期
  • UML常用圖的幾種關係的總結
    UML常用圖的幾種關係的總結在UML的類圖中,常見的有以下幾種關係: 泛化(Generalization),  實現(Realization
  • 實用|幾種常用的電腦截圖方法
    在我們日常工作中,截圖這個功能使用得非常頻繁。不過小編觀察,大家普遍只用自己熟知的一兩種方式,比如有時候沒有登錄微信,就找不到截圖的方法了。
  • 畫張圖,聊一聊常用的幾種配線架
    配線架,在綜合布線系統中是非常重要的設備,越大越複雜的系統越離不開配線架。一、其作用歸納起來主要就是兩點:1、線與纜之間的轉換比如,大對數電纜通過語音配線架轉換為一對對電話線分發到各個辦公室。再比如,光纜通過光纖配線架轉換為一根根光纖插入光傳輸設備。
  • WAF開發之CC攻擊防護
    (類似於挖礦病毒,客戶端在那幾秒內計算結果會大量使用CPU,如果是攻擊者,等於自己打自己)接下來,分別對這兩個模式進行LUA代碼開發。DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><h1> 瀏覽器安全檢測中。。。。
  • 【碼農每日一題】Java PriorityQueue 中二叉堆原理相關問題
    yu碼農每日一題長按關注置頂工作日每天推送一個短小精幹的技術知識點
  • 猿蛻變9——一文搞定SpringMVC的RESTFul套路
    RESTful是一種網絡應用程式的設計風格和開發方式,基於HTTP,可以使用XML格式定義或JSON格式定義(就目前而言基本上是JSON的天下了)。 項目開發引入RESTful架構,利於團隊並行開發。在RESTful架構中,將多數HTTP請求轉移到前端伺服器上,降低伺服器的負荷,使視圖獲取後端模型失敗也能呈現。但RESTful架構卻不適用於所有的項目,當項目比較小時無需使用RESTful架構,項目變得更加複雜。
  • 阿留申群島【每日一題2019.7.27】
    準備迎接今天的刷題吧!歡迎大家留言打卡打卡格式:DAY+打卡天數+答案及解題思路每月堅持打卡滿一個月的同學並且轉發朋友圈15天在月末將獲得錯題本注意是所有同學有些同學會因為學校原因無法打卡,可在每星期休息時間就行補打卡。