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

          【拓展】GET 請(qǐng)求能傳圖片嗎?

          共 1959字,需瀏覽 4分鐘

           ·

          2020-12-18 03:10

          作者:沉末? 原文地址:https://juejin.im/post/6860253625030017031

          前言

          曾經(jīng)遇到的面試題,覺得挺有意思,來說下我的答案及思考過程。

          首先,我們要知道的是,圖片一般有兩種傳輸方式:base64file對(duì)象。

          base64 圖片

          圖片的base64編碼想必大家都見過:

          base64 的本質(zhì)是字符串,而 GET 請(qǐng)求的參數(shù)在 url 里面,所以直接把圖的 base64 數(shù)據(jù)放到 url 里面,就可以實(shí)現(xiàn) GET 請(qǐng)求傳圖片。

          input 輸入框拿到的圖是 file 對(duì)象,圖片 file 對(duì)象轉(zhuǎn) base64

          // img參數(shù):file文件或者blob
          const?getBase64?=?img?=>?{
          ??return?new?Promise((resolve,reject)?=>?{
          ????const?reader?=?new?FileReader();
          ????reader.onload?=?e?=>?{
          ??????resolve(e.target.result);
          ????};
          ????reader.onerror?=?e?=>?reject(e);
          ????reader.readAsDataURL(img);
          ??})
          }

          問題來了,GET 請(qǐng)求的 url 長(zhǎng)度是有限制的,不同的瀏覽器長(zhǎng)度限制不一樣,最長(zhǎng)的大概是 10k 左右,根據(jù) base64 的編碼原理,base64圖片大小比原文件大小大 1/3,所以說 base64 只能傳一些非常小的小圖,大圖的 base64 太長(zhǎng)會(huì)被截?cái)唷5鋵?shí)這個(gè)長(zhǎng)度限制是瀏覽器給的,而不是 GET 請(qǐng)求本身,也就說,在服務(wù)端,GET 請(qǐng)求長(zhǎng)度理論上無限長(zhǎng),也就是可以傳任意大小的圖片。

          file 對(duì)象

          我們來看看這個(gè)場(chǎng)景:

          "http://localhost:8080/"?method="get">
          ????<input?type="file"?name="logo">
          ????<input?type="submit">
          form>

          選擇圖片,然后提交表單,能提交成功,但是接口收不到文件。請(qǐng)求的 url 會(huì)變成 http://localhost:8080/?logo=xxx.png,但是不會(huì)攜帶圖片數(shù)據(jù)。正常情況,file 對(duì)象數(shù)據(jù)是放在POST請(qǐng)求的 body 里面,并且是 form-data 編碼。那么 GET 請(qǐng)求能否有 body 體呢?答案是可以有。GETPOST 并沒有本質(zhì)上的區(qū)別,他們只是 HTTP 協(xié)議中兩種請(qǐng)求方式,僅僅是報(bào)文格式不同(或者說規(guī)范不同)。做過底層開發(fā)的同事可能比較熟悉,之前我們C語言的同事和我講,我們的 HTTP 請(qǐng)求,他們收到是這樣子的:

          舉個(gè)栗子, 一個(gè)普通的 GET 請(qǐng)求,他們收到是這樣的:

          GET /test/?sex=man&name=zhangsan HTTP/1.1
          Host: http://localhost:8080
          Accept: application/json, text/plain, */*
          Accept-Encoding: gzip, deflate
          Accept-Language: zh-CN,zh;q=0.9
          Connection: Keep-Alive

          POST 請(qǐng)求長(zhǎng)這樣:

          POST?/add?HTTP/1.1
          Host:?http://localhost:8080
          Content-Type:?application/x-www-form-urlencoded
          Content-Length:?40
          Connection:?Keep-Alive

          sex=man&name=Professional?

          同樣,DELETE、PUT、PATCH 請(qǐng)求,也都是這樣的報(bào)文。底層解析這個(gè)報(bào)文的時(shí)候,并不關(guān)心是什么請(qǐng)求,所以說 GET請(qǐng)求也可以有body 體,也可以傳 form-data 數(shù)據(jù)。有興趣的可以拿 postman 試一下,看看 GET 請(qǐng)求傳圖片,接口能不能收到圖片文件:

          結(jié)尾

          綜上所述,GET 請(qǐng)求是可以傳圖片的,但是 GET 和 POST 的規(guī)范還是要遵守的,如果有后臺(tái)讓你這么做,錘他就行了!

          1. JavaScript 重溫系列(22篇全)
          2. ECMAScript 重溫系列(10篇全)
          3. JavaScript設(shè)計(jì)模式 重溫系列(9篇全)
          4.?正則 / 框架 / 算法等 重溫系列(16篇全)
          5.?Webpack4 入門(上)||?Webpack4 入門(下)
          6.?MobX 入門(上)?||??MobX 入門(下)
          7. 80+篇原創(chuàng)系列匯總

          回復(fù)“加群”與大佬們一起交流學(xué)習(xí)~

          點(diǎn)擊“閱讀原文”查看 80+ 篇原創(chuàng)文章

          瀏覽 44
          點(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>
                  无码-ThePorn | 粉嫩视频在线观看 | 激情综合色| 天堂sV在线最新版在线 | 天天松天天干天天操天天添 |