解决跨域问题 has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present[通俗易懂]

解决跨域问题 has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present[通俗易懂]说一下做项目时需要用到html2canvas做项目截图踩到的跨域坑。项目需要拉取用户的头像,而linkedin和微信的头像存放于cdn中,这边涉及到的跨域问题。坑1:由于跨域,画布被污染,不能调用toBlob(),toDataURL()或getImageData()方法,调用它们会抛出安全错误。按网上说的做,配置useCORS:true,…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

说一下做项目时需要用到html2canvas做项目截图踩到的跨域坑。

项目需要拉取用户的头像,而linkedin和微信的头像存放于cdn中,这边涉及到的跨域问题。

坑1:

由于跨域, 画布被污染,不能调用 toBlob(), toDataURL() 或 getImageData() 方法,调用它们会抛出安全错误。

按网上说的做,

        配置 useCORS: true,

        Nginx添加请求头

                add_header Access-Control-Allow-Origin *;
                add_header Access-Control-Allow-Credentials: true;

成功解决了画布被污染的问题。然而这种解决方法只可以解决你自己服务器的问题,你总不能去微信或其他第三方服务器添加请求头吧。。。更大的坑来了

坑2:

被对方服务器拒绝图片请求。

Access to Image ‘https://media.licdn.com/dms/image/C5603AQHCky1Ku581hg/profile-displayphoto-shrink_100_100/0?e=1573689600&v=beta&t=8TqbDk8iWCXXXXXXXXXXXXXXXXXXXXX’ has been blocked from origin ‘127.0.0.1:8000’

尝试了各种方法,包括

        在img标签上添加crossorigin = “anonymous”;

        前端页面设置<meta http-equiv=”Cache-Control” content=”no-cache, no-store, must-revalidate” />;

        Nginx设置 add_header Cache-Control no-store;

都没有成功。

最后还是由Nginx解决,分两部步

第一步:

       首先将服务器保存的第三方cdn链接

              ‘https://media.licdn.com/dms/image/C5603AQHCky1Ku581hg/profile-displayphoto-shrink_100_100/0?e=1573689600&v=beta&t=8TqbDk8iWCXXXXXXXXXXXXXXXXXXXXX

       保存为 :

              “本地域名/third_image/dms/image/C5603AQHCky1Ku581hg/profile-displayphoto-shrink_100_100/0?e=1573689600&v=beta&t=8TqbDk8iWCXXXXXXXXXXXXXXXXXXXXX

       访问第三方的域名涉及到跨域,但是访问本地的其他资源文件夹是OK的。

第二部:

       然后在Nginx设置一下代理

       location ^~ /third_image/ {

              add_header ‘Access-Control-Allow-Origin’ “$http_origin” always;
              add_header ‘Access-Control-Allow-Credentials’ ‘true’ always;
              add_header ‘Access-Control-Allow-Methods’ ‘GET, OPTIONS’ always;
              add_header ‘Access-Control-Allow-Headers’ ‘Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-  Since,Keep-Alive,Origin,User-Agent,X-Requested-With’ always;
              proxy_pass https://media.licdn.com/;
       }

也就是:

把            https://media.licdn.com/dms/image/C5603AQHCky1Ku581hg/profile-displayphoto-shrink_100_100/0?e=1573689600&v=beta&t=8TqbDk8iWCXXXXXXXXXXXXXXXXXXXXX
保存为     https://本地域名/third_image/dms/image/C5603AQHCky1Ku581hg/profile-displayphoto-shrink_100_100/0?e=1573689600&v=beta&t=8TqbDk8iWCXXXXXXXXXXXXXXXXXXXXX

最后由Nginx代理为  https://media.licdn.com/dms/image/C5603AQHCky1Ku581hg/profile-displayphoto-shrink_100_100/0?e=1573689600&v=beta&t=8TqbDk8iWCXXXXXXXXXXXXXXXXXXXXX
 

完美解决!眼泪都要掉下来了,太感人了

更新啦更新啦~~~~ 推荐大家阅读我的最新原理解析篇呀:解决跨域问题 has been blocked by CORS policy 后续,原理解析篇

       

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/172636.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • WIN10系统 Indirect Display 虚拟显示器之特殊应用

    WIN10系统 Indirect Display 虚拟显示器之特殊应用byfanxiushu2020-05-20转载或引用请注明原始作者。有人询问我是否可以实现这样一种功能:对windows输出的每一帧图像数据显示做一些特殊处理(比如球形桌面,曲面化等特效),然后再显示到显示器上。而且还不止一个人这样咨询过,虽然我不大清楚这种需求具体用在何处,估计也是一些特殊场所。这种需求,最先想到的,也最直观的想法就是能否给显卡驱动添加一个过滤驱动,然后拦截图像数据,然后再做些特殊处理。可惜想法是美好的,却是难以实现的,甚至是不大可能实现的。首先windows中就没显卡过

    2022年8月21日
    6
  • svn服务器文件保存位置,Windows 部署SVN服务器

    svn服务器文件保存位置,Windows 部署SVN服务器一、准备在Windows系统安装完成后,就可以搭建SVN服务器了。需要准备以下软件:VisualSVN-Server-3.9.0-x64.msi–SVN服务器软件二、VisualSVNServer安装1.双击VisualSVN-Server-3.9.0-x64.msi准备安装,点击“Next”image.png2.接受许可协议,点击“Next”ima…

    2022年7月19日
    15
  • Builder 构造器模式[通俗易懂]

    Builder 构造器模式[通俗易懂]Builder 构造器模式动机模式定义实例结构要点总结笔记动机在软件系统中,有时候面临着”一个复杂对象“的创建过程,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将他们组合在一起的算法却通常相对稳定。如何应对这种变化?如何提供一种”封装机制“来隔离出”复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?模式定义将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建出不通的表示(变化)实例构

    2022年8月9日
    9
  • 解散群通知怎么写_要解散群,怎么说得体,大方「建议收藏」

    解散群通知怎么写_要解散群,怎么说得体,大方「建议收藏」展开全部1、明天我e69da5e887aa62616964757a686964616f31333433643063们这个群就要解散了,请把这个小步的礼物装在胸膛,它会化成你的信念和力量,鼓舞你去战胜狂风恶浪。12、不要说珍重,不要说再见,就这样,默默地离开。但愿,在金色的秋季,友谊之树上将垂下丰硕的果子,各位群友们珍重。3、你临别的微笑虽然只是短短的一瞬,但是摄在我心的底片上,却留下了永恒。我时时…

    2022年5月12日
    585
  • 【nodejs】node不是内部或外部命令

    【nodejs】node不是内部或外部命令

    2021年10月1日
    48
  • IDEA2018.1.4 破解教程

    第一步:下载破解补丁==》http://idea.lanyus.com/下载之后得到==》JetbrainsCrack-2.10-release-enc.jar第二步:重命名去掉-release-enc,然后放在IDEA安装目录的bin文件夹里面第三步:分别在idea.exe.vmoptions和idea64.exe.vmoptions文件里的最后一行添加-java…

    2022年4月6日
    141

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号