是这样的需求,有一个web页面,里面图片的上传和预览来自于一个独立的文件服务器,对http的请求需要进行访问权限的设置,就是在请求的header里加一个Authorization的字段。上传好说我用的Axios直接添加一个header就行了,但是预览就比较麻烦了,因为img这个标签图片下载展示是浏览器自己实现的,没有办法去修改。所以首先想到就是通过接口添加自定义header转发请求或者其他通过接口的方案了,那怎么通过前端页面去实现这个功能,首先声明的是这里用了一些新的API,所以如果是一些比较老的浏览器那就没法这么做了。

问题分析:img标签的src属性只能设置url,不能设置这次请求的header。既然这样,能不能通过别的方式先把图片下载下来然后再给img标签作展示,相当于把src属性的下载和展示分成了两步,先调用接口获取到了数据,然后再把数据给展示出来,也就是src里的值不是一个url地址而是一个数据流。

可以这样,首先通过Object.defineProperty定义一个authSrc属性用来替换src属性的值,然后在window.onload里等dom加载完以后去再下载图片。

Proxy Image

writable : true,

enumerable : true,

configurable : true

})

window.onload = () => {

let img = document.getElementById('img');

let url = img.getAttribute('authsrc');

let request = new XMLHttpRequest();

request.responseType = 'blob';

request.open('get', url, true);

request.setRequestHeader('Authorization', '凭证信息');

request.onreadystatechange = e => {

if (request.readyState == XMLHttpRequest.DONE && request.status == 200) {

img.src = URL.createObjectURL(request.response);

img.onload = () => {

URL.revokeObjectURL(img.src);

}

}

};

request.send(null);

}

img标签请求拦截_如何给img标签里的请求添加自定义header?相关推荐

  1. 请求拦截_实战SpringCloud通用请求字段拦截处理

    背景 以SpringCloud构建的微服务系统为例,使用前后端分离的架构,每个系统都会提供一些通用的请求参数,例如移动端的系统版本信息.IMEI信息,Web端的IP信息,浏览器版本信息等,这些参数可能 ...

  2. gateway请求拦截_一种网关对用户请求进行统一拦截判断是否放行的方法与流程...

    本发明涉及互联网技术领域,特别涉及一种网关对用户请求进行统一拦截判断是否放行的方法. 背景技术: 随着互联网发展的越来越快,技术也更新的非常频繁,比如开发一个系统的架构由最初始的单个服务器就能处理演变 ...

  3. 设置公共请求参数_基于分布式锁的防止重复请求解决方案(值得收藏)

    关于重复请求,指的是我们服务端接收到很短的时间内的多个相同内容的重复请求.而这样的重复请求如果是幂等的(每次请求的结果都相同,如查询请求),那其实对于我们没有什么影响,但如果是非幂等的(每次请求都会对 ...

  4. corspost请求失败_记一次 CORS 跨域请求出现 OPTIONS 请求的问题及解决方法

    今天前后端在联调接口的时候,发生了跨域请求资源获取不到的问题. 首先说明下跨域问题的由来.引自HTTP 访问控制 的一段话: 当 Web 资源请求由其它域名或端口提供的资源时,会发起跨域 HTTP 请 ...

  5. java http请求 乱码_怎么解决java中的http请求乱码

    怎么解决java中的http请求乱码 发布时间:2020-06-23 20:00:11 来源:亿速云 阅读:90 作者:元一 怎么解决java中的http请求乱码?针对这个问题,今天小编总结了这篇文章 ...

  6. 5新标签中超链接_一环路新标签——“市井生活圈” 正在更新中......

    提起一环路 各位小伙伴想到了什么? 是最早建成.成都城市交通网 还是居住人口高聚集区? 不过这些标签早就该"更新"啦! 随着景观风貌.街区产业的改造 "市井生活圈&quo ...

  7. 分页携带请求参数_一个值得深思的小问题 请求中的参数值为空要不要携带该参数?...

    最近一个朋友疯狂的和我吐槽公司的后端,说很常规.很普通的一个事儿,也就是验证一下子的事儿,非要搞的那么复杂,治标不治本,技术玩来玩去不但没进步还倒退了. 这是怎么回事呢?咱们就来聊聊这件"小 ...

  8. java中的 请求体_在spring mvc test中访问请求体和请求头

    我创建了一个spring boot应用程序,这就是我的控制器的样子 . 我使用postman在请求体中发送json,在请求头中发送一个字符串,然后进一步散列json并将其与请求头获取的字符串进行比较 ...

  9. java http请求原理_浅谈Spring Cloud zuul http请求转发原理

    spring cloud 网关,依赖于netflix 下的zuul 组件 zuul 的流程是,自定义 了ZuulServletFilter和zuulServlet两种方式,让开发者可以去实现,并调用 ...

最新文章

  1. 【Android】3.0 第3章 百度地图及其应用--预备知识
  2. Python基础教程:连接列表的八种方法,你都知道吗?
  3. ACM基础之取消cin与stdio的同步
  4. HiveSQL常用优化方法全面总结
  5. X210烧写linux系统
  6. TypeError: unhashable type: 'numpy.ndarray'
  7. 【OpenCV 例程200篇】79. 频率域图像滤波的基本步骤
  8. CV新赛事|CT影像诊断新冠肺炎北京垃圾分类识别~文末有福利
  9. Automatic Judge
  10. Intellij IDEA 14.x 菜单项中Compile、Make和Build的区别
  11. 程序清单 8-8 exec函数实例,a.out是程序8-9产生的可执行程序
  12. Android插件化原理—ClassLoader加载机制
  13. 常用Linux命令(持续更新)
  14. 字典-dict(无序)
  15. [Oracle]分区索引
  16. 使用OBS录屏神器,完美录制第二块屏幕。
  17. 编程思维---排他思想
  18. 宝付正式执行“适当降低小微企业支付手续费”工作部署任务
  19. m与n的数字运算python_Python脚本基础运算和算法
  20. android 唤醒屏幕

热门文章

  1. Dirichlet Process
  2. 虚拟机网络配置 桥接模式与Nat模式
  3. 设备点检巡检系统助力企业提高设备生产率
  4. hmailserver邮箱服务器,关于HmailServer邮件服务器
  5. 玩转mini2440开发板之【下载编译安装运行QT lib/QT Creator/QT程序全过程】
  6. 未来计算 4195 未来算算 2211 闪电链
  7. CUDA如何选取Blocks和Threads
  8. 究竟什么占用了你的显存容量
  9. Windows系统命令(dos)
  10. 华硕uefi不识别linux安装u盘启动,uefi无法从u盘启动系统