<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【每日一題】說(shuō)說(shuō)開(kāi)發(fā)中常用的幾種 Content-Type?

          共 2737字,需瀏覽 6分鐘

           ·

          2021-09-26 17:19

          人生苦短,總需要一點(diǎn)儀式感。比如學(xué)前端~

          Content-Type 的定義

          HTTP 的實(shí)體首部字段,用于說(shuō)明請(qǐng)求或返回的消息主體是何種方式編碼,在 request header(請(qǐng)求頭) 和 response header(響應(yīng)頭) 里存在。

          幾種常見(jiàn)的類(lèi)型:


          • application/x-www-form-urlencoded

          • multipart/form-data

          • application/json

          • text/xml


          application/x-www-form-urlencoded

          瀏覽器的原生 form 表單,如果不設(shè)置屬性,那么最終就會(huì)以application/x-www-form-urlencoded方式提交數(shù)據(jù),請(qǐng)求如上面的形式:

          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

          這種方式提交的數(shù)據(jù)放在 body 里面,數(shù)據(jù)按照key1=val1&key2=val2的方式進(jìn)行編碼,key 和 val 都進(jìn)行了 url 編碼

          multipart/form-data

          該種方式也是一種常見(jiàn)的 POST 提交方式,通常表單上傳文件時(shí)使用這種方式

          使用表單上傳時(shí),必須讓 form 的 enctype 等于這個(gè)值

          <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>

          在請(qǐng)求頭這里看起來(lái)是這樣:

          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--

          稍微分析下:

          首先生成一個(gè) boundary 用于分割不同的字段,為了避免與正文內(nèi)容重復(fù),boundary 很長(zhǎng)很復(fù)雜

          然后 content-Type 里指明了數(shù)據(jù)是以 multipart/from-data 來(lái)編碼,本次請(qǐng)求的 boundary 是什么內(nèi)容

          消息主體里按照字段個(gè)數(shù)又分為多個(gè)結(jié)構(gòu)類(lèi)似的部分,每部分都是以 --boundary開(kāi)始,緊接著是內(nèi)容描述信息,然后是回車(chē),最后是字段具體內(nèi)容(文本或二進(jìn)制)

          如果傳輸?shù)氖俏募?,還要包含文件名和文件類(lèi)型信息。消息主體最后以--boundary-- 標(biāo)識(shí)結(jié)束。

          關(guān)于 multipart/form-data 的詳細(xì)定義,可前往 rfc1867 查看

          application/json

          application/json 作為響應(yīng)頭,現(xiàn)在越來(lái)越多的人把其作為請(qǐng)求頭,用來(lái)告訴服務(wù)器消息主體是序列化后的 json 字符串。請(qǐng)求類(lèi)似下面形式

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

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

          這種方案,可以方便的提交復(fù)雜的結(jié)構(gòu)化數(shù)據(jù),特別適合 RESTful 的接口。各大抓包工具如 chrome 自帶的開(kāi)發(fā)者工具、Firebug、Fiddler,都以樹(shù)形結(jié)構(gòu)展示 JSON 數(shù)據(jù),非常友好。

          text/xml

          該種方式主要用來(lái)提交 XML 格式的數(shù)據(jù),請(qǐng)求形式如下:

          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 方面,現(xiàn)在 JSON 大有取代 XML 的意思,但是 XML 依然有其不可代替的領(lǐng)域。


          所有《每日一題》的 知識(shí)大綱索引腦圖 整理在此:https://www.yuque.com/dfe_evernote/interview/everyday
          你也可以點(diǎn)擊文末的 “閱讀原文” 快速跳轉(zhuǎn)


          END
          愿你歷盡千帆,歸來(lái)仍是少年。

          讓我們一起攜手同走前端路!

          關(guān)注公眾號(hào)回復(fù)【加群】即可

          瀏覽 22
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  五月天婷婷乱伦小说 | 日本a√一级在线观看 | 操香蕉| 狠狠V欧美v日韩V亚洲v | 亚洲少妇在线观看 |