各种Kill跨域Boss的方法

一个应用场景,需要跨域获取json数据以及html页面

方案1-JSONP:

对于JSON数据,可以很容易的获取。不过在结合Android的WebView后会存在一个很严重的问题。

在Android的WebView下面,会给每一次JSONP进行一次缓存,使用Eclipse+Android模拟器会发现apk的data目录下,会生成很多缓存文件,每一个文件就是一个JSONP的函数。

随着越来越多的请求,该目录下面的缓存文件也会越来越多。对于桌面浏览器而言,性能强大,影响不是很大,但对于寸土寸金的移动客户端,这细节是必须注意滴。

感谢某同事发现这一问题。

方案2-iframe:

一直以来,我都把iframe和frame给混为一谈,每当人们提到iframe,我总是极力想避开。

其实iframe和frame是两码事,iframe就是用来加载远程html用的。不过对于加载远程html里面的JS脚本,依然会和父html页面存在跨域问题。

方案3-设置Access-Control-Allow-Origin:

除去IE9、其他浏览器都完美支持,包括Andorid和iOS自带的。浏览器兼容性

对于IE9和IE8,需要把XMLHttpRequest请求改为XDomainRequest,IE10开始支持XMLHttpRequest。

测试的时候,直接设置为任意源,实际部署的时候,再根据实际情况,设置允许跨域源即可。

JerryQu的文章也写到了《也谈跨域数据交互解决方案》,他把CORS列为Kill Boss的终极必杀技。

方案4-各种Proxy手段:

PHP很容易就file_get_contents()一个远程源,然后再吐出来个自己用。

简单方便,不过和我实际场景有点不一致,这里不使用,拿来测试还OK。

结语:

我认为浏览器的同源限制,有它当初设计的考虑,在我还不了解背后的安全性因素的时候,贸贸然的使用各种方法去跨越这道安全屏障、去越狱,是不明智的,尤其是如果要部署到生产环境的话。很有可能会打开了潘多拉的盒子,各种XSS攻击随即而至。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏木头编程 - moTzxx

跨域解决方案整理笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

1483
来自专栏张戈的专栏

【 ES 私房菜】ElasticSearch 详细部署教程

Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。本文详细介绍了elasticserch的部署...

1.3K1
来自专栏木子墨的前端日常

关于options请求的一点理解

最近最项目改造,对所有的ajax请求统一做了一点处理,发现原来很正经的ajax请求突然不正常了,每个ajax之前都多了一个相应的method为options的请...

4572
来自专栏分布式系统进阶

Kafka重置消费的OffsetKafka源码分析-汇总

4702
来自专栏阮一峰的网络日志

跨域资源共享 CORS 详解

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。 它允许浏览器向跨源服务器,发出XMLHttpR...

3237
来自专栏张善友的专栏

介绍一位OWin服务器新成员TinyFox

TinyFox 是一款支持OWIN标准的WEB应用的高性能的HTTP服务器,是Jexus Web Server的"姊妹篇"。TinyFox本身的功能是html服...

2196
来自专栏云计算教程系列

使用CVM搭建FileRun私人网盘

FileRun是由PHP编写的文件管理器和文件共享程序,可帮助您访问,整理,查看和编辑文件。您可以将其与Office文档,照片,音乐等文件一起使用。在本教程中,...

43011
来自专栏圣杰的专栏

ASP.NET Core Web App应用第三方Bootstrap模板

作为后端开发来说,前端表示玩不转,我们一般会选择套用一些开源的Bootstrap 模板主题来进行前端设计。那如何套用呢?今天就简单创建一个ASP.NET Cor...

3011
来自专栏码匠的流水账

修复zuul跨域配置异常

多次请求的时候,会把这些header再带过来,然后请求zuul转发的接口又在写入一次,造成重复了,方案就是zuul转发的时候,过滤掉这些header,比如

1442
来自专栏Ryan Miao

Javascript跨域后台设置拦截

子域名之间互相访问需要跨域 结论放在开头: 服务端必须设置允许跨域 客户端带cookie需要设置withCredentials 无论服务端是否允许跨域,该req...

2788

扫码关注云+社区

领取腾讯云代金券