Cookie 和 Canvas 等跨域解决方法

发布于 2021-12-29 12:53:23 字数 1412 浏览 968 评论 0

前端跨域,除了接口的跨域之外,还有其余 N 多形式的跨域

1、iframe 调用

如果 iframe 如果是跨域的话,就无法进行父、子界面的数据交互,无法进行 dom 操作、无法进行方法调用。如果是跨域的话,子界面无法请求到父界面的 location 地址,但是可以改写,这个可以有效防止自己的界面被恶意网站做 iframe 嵌套。

iframe 还有一个绝招,就是设置相应 header,直接不允许跨域加载。

2、cookie 的跨域

自从 localstorage 出来之后,cookie 很少记录缓存了,现在一般用于记录用户的登录信息,用于网站界面之间的跳转。cookie 也有域之分,也可以设置根域。

跨越接口请求,携带 cookie 的话,在前文中有解决方案。利用 cookie 的跨域特性,一般大公司的 cdn 或者静态资源服务器,都会使用不同域名的服务器,免得 cookie 带过去,又浪费带宽,又加大了服务器解析请求头的时间。

3、localstorage 的跨域

localstorage,是跨域,这个没法整,就做个缓存而已。

4、图片的跨域

这个严格说来不算是跨域,算是跨权限,很多图片供应网站,如昵图网、百度图片等,图片地址不会随意在别的网站上使用的,会出个展位图,提示无权限使用,这个无解。

5、flash 跨越

这个简单的很,flash 有自己的安全沙箱,一般都是将 crosdomain.xml,放置于 .swf 文件一个域下,然后就万事大吉了。

6、Canvas 跨域

canvas 跨域,都是 Canvas 图片的跨域,将界面的图片地址通过 Canvas 进行本地输出时,会出现 toDataURL 访问权限问题:

canvas图片的跨域

解决方案:根据错误分析需要在控制头增加 Access-Control-Allow-Origin,即允许访问源文件权限,那么我们对这个页面【注意是要输出页面的图片】这样处理:

var img = new Image;img.onload = myLoader;
img.crossOrigin = 'anonymous';
// 可选值:anonymous: *
img.src = 'http://myurl.com/....';

或者是 HTML 中

<img src="" crossorigin="anonymous">

核心是请求头中包含了 Origin: "anonymous"或"*" 字段,响应头中就会附加上 Access-Control-Allow-Origin: * 字段,问题解决。

总结

为了安全,还是跨域的好,遇到问题,挨个解决就行。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

檐上三寸雪

暂无简介

0 文章
0 评论
514 人气
更多

推荐作者

遂心如意

文章 0 评论 0

5513090242

文章 0 评论 0

巷雨优美回忆

文章 0 评论 0

junpengz2000

文章 0 评论 0

13郎

文章 0 评论 0

qq_xU4RDg

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文