成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

字節二面:GET 請求能上傳圖片嗎?我蒙了

開發 后端
曾經遇到的面試題,覺得挺有意思,來說下我的答案及思考過程。

 [[434530]]

前言

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

首先,我們要知道的是,圖片一般有兩種傳輸方式:base64和file對象。

base64 圖片

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

base64的本質是字符串,而GET請求的參數在url里面,所以直接把圖的base64數據放到url里面,就可以實現GET請求傳圖片。

input輸入框拿到的圖是file對象,圖片file對象轉base64: 

  1. // img參數:file文件或者blob  
  2. const getBase64 = img => {  
  3.   return new Promise((resolve,reject) => {  
  4.     const reader = new FileReader();  
  5.     reader.onload = e => {  
  6.       resolve(e.target.result);  
  7.     };  
  8.     reader.onerror = e => reject(e);  
  9.     reader.readAsDataURL(img);  
  10.   })  

問題來了,GET請求的url長度是有限制的,不同的瀏覽器長度限制不一樣,最長的大概是 10k 左右,根據base64的編碼原理,base64圖片大小比原文件大小大 1/3,所以說base64只能傳一些非常小的小圖,大圖的base64太長會被截斷。

但其實這個長度限制是瀏覽器給的,而不是GET請求本身,也就說,在服務端,GET請求長度理論上無限長,也就是可以傳任意大小的圖片。

file 對象

我們來看看這個場景: 

  1. <form action="http://localhost:8080/" method="get">  
  2.     <input type="file" name="logo">  
  3.     <input type="submit">  
  4. </form> 

選擇圖片,然后提交表單,能提交成功,但是接口收不到文件。請求的url會變成http://localhost:8080/?logo=xxx.png,但是不會攜帶圖片數據。正常情況,file對象數據是放在POST請求的body里面,并且是form-data編碼。

推薦一個 Spring Boot 基礎教程及實戰示例:https://github.com/javastacks/spring-boot-best-practice

那么GET請求能否有body體呢?

答案是可以有。

GET和POST并沒有本質上的區別,他們只是HTTP協議中兩種請求方式,僅僅是報文格式不同(或者說規范不同)。

做過底層開發的同事可能比較熟悉,之前我們C語言的同事和我講,我們的HTTP請求,他們收到是這樣子的:

舉個栗子, 一個普通的 GET 請求,他們收到是這樣的: 

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

POST 請求長這樣: 

  1. POST /add HTTP/1.1  
  2. Host: http://localhost:8080  
  3. Content-Type: application/x-www-form-urlencoded  
  4. Content-Length: 40  
  5. Connection: Keep-Alive  
  6. sex=man&name=Professional 

同樣,DELETE、PUT、PATCH請求,也都是這樣的報文。底層解析這個報文的時候,并不關心是什么請求,所以說GET請求也可以有body體,也可以傳form-data數據。

有興趣的可以拿 postman 試一下,看看GET請求傳圖片,接口能不能收到圖片文件:

結尾

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

 

責任編輯:龐桂玉 來源: java版web項目
相關推薦

2024-07-01 00:00:02

2025-01-15 07:54:02

2021-02-06 09:07:58

字節跳動消息

2023-05-07 07:45:31

2024-05-09 16:23:14

華為事務類型

2021-06-30 17:38:03

Trie 樹字符Java

2025-03-28 10:47:05

開發注解Java

2025-04-14 01:11:00

2025-01-03 08:42:59

數據庫三范式架構

2021-03-01 11:53:15

面試偽共享CPU

2024-08-30 08:59:15

2025-04-08 09:20:00

Sentinel限流微服務

2021-06-07 09:37:24

蘋果數據開發

2022-08-13 12:07:14

URLHTTP加密

2021-01-26 01:55:24

HTTPS網絡協議加密

2021-03-15 11:20:46

HTTPS優化前端

2022-03-14 11:05:01

RocketMQRedis緩存

2023-11-27 08:57:24

GoGET

2022-06-02 10:54:16

BrokerRocketMQ

2023-06-29 08:43:44

DNS解析IP
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av在线一区二区三区 | 国产中文字幕网 | 韩日一区二区三区 | 99在线免费视频 | 日韩一区二区视频 | 国产精品久久久久久久久久 | 久久久久久久久久一区 | 亚洲最大的成人网 | 伊人欧美视频 | 日韩中文字幕 | 久久精品电影 | 91av亚洲 | 黄色精品 | 亚洲一区二区精品 | 国产成人区| 99精品国产一区二区青青牛奶 | 超碰日本| 国产日韩欧美在线观看 | 国精久久 | 成人国产一区二区三区精品麻豆 | 国产日韩久久久久69影院 | 久久91av| 国产影音先锋 | 精品久久久久久中文字幕 | 成人在线观看免费爱爱 | 国产一区二区久久 | 欧美精品在线观看 | 男女啪啪网址 | 国产精品精品视频一区二区三区 | 在线视频日韩 | 奇米超碰 | 黄色毛片黄色毛片 | 日韩精品免费一区二区在线观看 | 亚洲自拍偷拍av | 亚洲高清电影 | 一区二区三区视频 | 91精品国产91久久久久久吃药 | 国产在线精品一区二区三区 | 欧美性tv| 久久久久1| 五月免费视频 |