GET 请求能传图片吗?
程序員的成長之路
互聯網/程序員/技術/資料共享?
關注
閱讀本文大概需要 2.4 分鐘。
作者:沉末??
原文地址:https://juejin.im/post/6860253625030017031
前言
曾經遇到的面試題,覺得挺有意思,來說下我的答案及思考過程。
首先,我們要知道的是,圖片一般有兩種傳輸方式:base64和?file對象。
base64 圖片
圖片的base64編碼想必大家都見過:
base64?的本質是字符串,而?GET?請求的參數在?url?里面,所以直接把圖的?base64?數據放到?url?里面,就可以實現?GET?請求傳圖片。
input?輸入框拿到的圖是?file?對象,圖片?file?對象轉base64?:
// img參數: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?請求的?url?長度是有限制的,不同的瀏覽器長度限制不一樣,最長的大概是 10k 左右,根據?base64的編碼原理,base64圖片大小比原文件大小大 1/3,所以說?base64?只能傳一些非常小的小圖,大圖的?base64?太長會被截斷。
但其實這個長度限制是瀏覽器給的,而不是?GET?請求本身,也就說,在服務端,GET?請求長度理論上無限長,也就是可以傳任意大小的圖片。
file 對象
我們來看看這個場景:
<form?action="http://localhost:8080/"?method="get"><input?type="file"?name="logo"><input?type="submit"> </form>選擇圖片,然后提交表單,能提交成功,但是接口收不到文件。請求的?url?會變成?http://localhost:8080/?logo=xxx.png,但是不會攜帶圖片數據。正常情況,file?對象數據是放在POST請求的?body?里面,并且是?form-data?編碼。
那么?GET?請求能否有?body?體呢?答案是可以有。GET?和?POST?并沒有本質上的區別,他們只是?HTTP?協議中兩種請求方式,僅僅是報文格式不同(或者說規范不同)。
做過底層開發的同事可能比較熟悉,之前我們C語言的同事和我講,我們的?HTTP?請求,他們收到是這樣子的:
舉個栗子, 一個普通的 GET 請求,他們收到是這樣的:
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-AlivePOST 請求長這樣:
POST?/add?HTTP/1.1 Host:?http://localhost:8080 Content-Type:?application/x-www-form-urlencoded Content-Length:?40 Connection:?Keep-Alivesex=man&name=Professional?同樣,DELETE、PUT、PATCH?請求,也都是這樣的報文。底層解析這個報文的時候,并不關心是什么請求,所以說GET請求也可以有body?體,也可以傳?form-data?數據。
有興趣的可以拿 postman 試一下,看看?GET?請求傳圖片,接口能不能收到圖片文件:
結尾
綜上所述,GET 請求是可以傳圖片的,但是 GET 和 POST 的規范還是要遵守的,如果有后臺讓你這么做,錘他就行了!
<END>
推薦閱讀:
雷軍1994年寫的詩一樣的代碼,我把它運行起來了!
Java 反射不是一點半點慢!
5T技術資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機,樹莓派,等等。在公眾號內回復「2048」,即可免費獲取!!
微信掃描二維碼,關注我的公眾號
朕已閱?
總結
以上是生活随笔為你收集整理的GET 请求能传图片吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用国内的镜像源搭建 kubernete
- 下一篇: 看看一位清华计算机专业的学生怎么看LIN