1.GET 请求能传图片吗?
图片一般有两种传输方式:base64 和 file对象
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长度是有限制的,不同的浏览器长度限制不一样,根据base64的编码原理,base64图片大小比原文件大小大1/3,所以说大图的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 协议中两种请求方式,仅仅是报文格式不同(或者说规范不同)
GET 请求能不能带 body 这个事是由 HTTP 协议来定义的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通