IT修真院·小课堂丨互联网职业小课堂在线学习平台

课堂课题:

前端垮域问题有哪些常用的解决方式?

关联任务:

任务二

直播时间:

2019-05-11 15:30:00


课堂内容:

视频链接:

PPT链接:

提交按钮:

小课堂内容格式


标题:

【修真院xx(职业)小课堂】课题名称

开场语:

大家好,我是IT修真院XX分院第X期的学员XX,一枚正直纯洁善良的XX程序员,今天给大家分享一下,修真院官网XX(职业)任务X,深度思考中的知识点——XXX

(1)背景介绍:

背景介绍的时候,尽可能的要宽广,讲清楚来龙去脉,讲清楚为什么会需要这个技术。

(2)知识剖析:

讲知识点的时候,尽可能的成体系,学会成体系的去给别人介绍知识。现在很多做的都是零散的,没有分类。

(3)常见问题:

最少列出1个常见问题。

(4)解决方案:

写清楚常见问题的解决方案。

(5)编码实战:

尽可能的去寻找在真实项目中在用的。如果你能找到某个网站在用你说的知识点,这是最好的。学以致用,否则当成练习题就没有意义了。多准备一些demo,讲解过程中将知识点和demo结合,便于大家理解所讲解的知识点。

(6)拓展思考:

知识点之外的拓展思考,由分享人进行讲解,这些东西就是所谓的深度,也是一个人技术水准高低比较的表现。

(7)参考文献:

引入参加文献的时候,在引用的句子后面加上序号【1】。参考文献中列出详细来源。不要去抄别人的东西,这是一个基本的态度。

(8)更多讨论:

Q1:提问人:问题?
A1:回答人(可以是分享人,也可以是其他学员):回答
Q2:提问人:问题?
A2:回答人(可以是分享人,也可以是其他学员):回答
Q3:提问人:问题?
A3:回答人(可以是分享人,也可以是其他学员):回答

(9)鸣谢:

感谢XX、XX师兄,此教程是在他们之前技术分享的基础上完善而成。

(10)结束语:

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

前端垮域问题有哪些常用的解决方式?     上品

辅导师兄 [真传弟子]JS-张林骞


                                                     前端垮域问题有哪些常用的解决方式??

  大家好,我是IT修真院上海分院第11期的学员左昌杰,一枚正直纯洁善良的web程序员,今天给大家分享一下,修真院官网js任务五,深度思考中的知识点——前端垮域问题有哪些常用的解决方式??

1.背景介绍:

1.1 什么是跨域?

指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。 

1.2 为什么需要跨域?

受浏览器同源策略的限制,本域的js不能操作其他域的页面对象(比如DOM)。但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦。所以我们要通过一些方法使本域的js能够操作其他域的页面对象或者使其他域的js能操作本域的页面对象(iframe之间)。

2.知识剖析

1.同源策略:

它是由Netscape提出的一个著名的安全策略。同源是指,域名,协议,端口相同。浏览器执行javascript脚本时,会检查这个脚本属于那个页面,如果不是同源页面,就不会被执行。

2.为什么script标签引入的文件不受同源策略的限制?

因为script标签引入的文件内容是不能够被客户端的js获取到的,不会影响到被引用文件的安全,所以没必要使script标签引入的文件遵循浏览器的同源策略。而通过ajax加载的文件内容是能够被客户端js获取到的,所以ajax必须遵循同源策略,否则被引入文件的内容会泄漏或者存在其他风险。


3.静态HTTP服务器:Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML、图片)通过HTTP协议展现给客户端

4.反向代理服务器:客户端本来可以直接通过HTTP协议访问某网站应用服务器,网站管理员可以在中间加上一个Nginx,客户端请求Nginx,Nginx请求应用服务器,然后将结果返回给客户端,此时Nginx就是反向代理服务器。

5.负载均衡:当网站访问量非常大,一台服务器已经不够用了。于是将同一个应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。Nginx可以通过反向代理来实现负载均衡。

3.常见问题

前端垮域问题有哪些常用的解决方式?

4.解决方案

4.1 window.name + iframe

window.name的美妙之处:name值在不同的页面(甚至不同域名)加载后依旧存在,并且可以支持非常长的name值(2MB)。原理:利用了“在同一浏览器窗口载入的不同页面( 无论它们是否不同域 ),共享同一个window.name,并且都对window.name有读写的权限”的这一特性来实现页面间的数据交换

4.2 CORS

CORS背后的思想,就是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功,还是应该失败。CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。 因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

4.3 JSONP

JSONP包含两部分:回调函数和数据。回调函数是当响应到来时要放在当前页面被调用的函数。数据就是传入回调函数中的json数据,也就是回调函数的参数了。

jsonp虽然很简单,但是有如下缺点:

1)安全问题(请求代码中可能存在安全隐患);

2)要确定jsonp请求是否失败并不容易。


4.4 配置Nginx通过域名访问网页

5.编码实战


<body>

<input type="text" id="ipt">

<ul id='ul'>

<li></li>

</ul>

</body>


</html>

<script type="text/javascript">

$('#ipt').blur(function () {

// console.log(1)

// 提供jsonp服务的url地址(不管是什么类型的地址,最终生成的返回值都是一段javascript代码)百度搜索接口

var url = "https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?cb=search&wd=" + $('#ipt').val();

// 创建script标签,设置其属性

var script = document.createElement('script');


script.setAttribute('src'url);


// // 把script标签加入head,此时调用开始

document.getElementsByTagName('head')[0].appendChild(script);

})




// 定义回调函数

function search(data) {

console.log(data);

for(var i =0;i<data.s.length;i++){

$('#ul').append(` <li>${data.s[i]}</li>`)

}

};

</script>

6.扩展思考

还有什么其他的跨域的方法?

location.hash + iframe

原理是利用location.hash来进行传值。假设域名a.com下的文件cs1.html要和cnblogs.com域名下的cs2.html传递信息。

1)cs1.html首先自动创建一个隐藏的iframe,iframe的src指向cnblogs.com域名下的cs2.html页面;

2)cs2.html响应请求后再将通过修改cs1.html的hash值来传递数据;

3)同时在cs1.html上加一个定时器,隔一段时间来判断location.hash的值有没有变化,一旦有变化则获取hash值

7.参考文献

参考:


掘金


8.更多讨论


9.结束语:

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~


评论

[上海|荣耀师兄]JS-付东华 发表于 2019-05-14 09:53:44 #1

讲的不错,条理清晰,知识点较全面

回复

请您登录 后进行评论