走进前端开发系列二

<img class="lazy" src="//p2.ttnews.xyz/loading.gif" data-original="http://p3.pstatp.com/large/pgc-image/1530515425479be827b6b6b" img_width="1" img_height="1" style="height:1px" alt="走进前端开发系列二" inline="0"><p class="pgc-img-caption"></p></div><div class="pgc-img"><img class="lazy" src="//p2.ttnews.xyz/loading.gif" data-original="http://p99.pstatp.com/large/pgc-image/153051542550021964c10d6" img_width="379" img_height="477" alt="走进前端开发系列二" inline="0"><p class="pgc-img-caption"></p></div><p>族长说:“是啊,XMLHttpReqeust也要遵守同源策略。”</p><p>JavaScript说:“可是这没有道理啊!我虽然是从book.com来的,但是为什么不让我访问beauty.com?”</p><p>族长说:“我这也是为了防止黑客攻击,给你举个例子,假设你的主人登录了book.com , 然后又去访问beauty.com,如果这个beauty.com是个恶意网站,它也要求你创建一个XMLHttpRequest对象,通过这个对象向book.com(不同源)发起请求,获取你主人的账户信息,会发生什么情况? ”</p><p>JavaScript恍然大悟:“奥,我懂了,由于主人登录过了book.com,登录cookie什么的都在,那beauty.com的JavaScript 向book.com发起的XMLHttpRequest请求也会成功,我主人的账户信息就会被黑客给获取了。”</p><p>我说:“看来对XMLHttpReqeust对象施加同源策略也是非常重要的啊!”</p><p>JavaScript沉默了半天说:“那怎么办?”</p><p>Mozilla族长说:“你可以通过服务器端中转啊,例如你是来自book.com的, 现在想访问movie.com,那可以让那个book.com把请求转发给movie.com嘛!人类好像给这种方式起了个名字,叫什么代理模式,那个book.com就是代理人。”</p><div class="pgc-img"><img class="lazy" data-original="http://p3.pstatp.com/large/pgc-image/1530515425479be827b6b6b" img_width="1" img_height="1" alt="走进前端开发系列二" inline="0"><p class="pgc-img-caption"></p></div><div class="pgc-img"><img class="lazy" data-original="http://p3.pstatp.com/large/pgc-image/15305154287979d16c9917f" img_width="202" img_height="486" alt="走进前端开发系列二" inline="0"><p class="pgc-img-caption"></p></div><p>JavaScript急忙说:“不不, 这样太麻烦了,族长你想想,如果我要访问多个不同源的系统,要是都通过book.com中转,该多麻烦!”</p><p>族长想了想说:“你说得有一定道理,我给你出个主意,既然服务器(domain)之间是互信的,那一个服务器(domain)可以设置一个白名单,里边列出它允许哪些服务器(domain)的AJAX请求。假设movie.com的白名单中有book.com, 那当属于book.com的JavaScript试图访问movie.com的时候......”</p><p>JavaScript马上接口说:“ 这时候,我们浏览器做点手脚,悄悄地把当前的源(book.com)发过去,询问下movie.com, 看看他是否允许我们访问,如何允许,你们就继续访问,否则就报错!”</p><div class="pgc-img"><img class="lazy" data-original="http://p3.pstatp.com/large/pgc-image/1530515425479be827b6b6b" img_width="1" img_height="1" alt="走进前端开发系列二" inline="0"><p class="pgc-img-caption"></p></div><div class="pgc-img"><img class="lazy" data-original="http://p99.pstatp.com/large/pgc-image/1530515425537402f53d648" img_width="610" img_height="347" alt="走进前端开发系列二" inline="0"><p class="pgc-img-caption"></p></div><p>组长说:“就是这个意思,这样以来,那些黑客就没有办法假冒用户向这些互信的服务器发送请求了, 我把这个方法叫做Cross Origin Resource Sharing,简称<strong>CORS</strong>,只不过这个方法需要服务器的配合了,JavaScript表示同意,这也算是一个不错的妥协方法了。请看下回。。。。。。</p></div>


分享到:


相關文章: