任务31-同源策略、跨域、jsonp

2016-12-14  本文已影响0人  小木子2016

问答

1. 什么是同源策略?

同源定义:所谓同源是指,域名,协议,端口相同。
<pre>例:http://www.x.com/index.html(与以下URL对比) http://www.x.com/reg.html (同源) http://1s.x.com/reg.htm(域名不同,不同源) https://www.x.com/index.htm(协议不同,不同源) http://www.x.com:8080/reg.html (端口不一致,不同源)</pre>
同源策略:同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。同源策略规定不同源的客户端脚本未经明确授权的情况下,不能读写对方的资源,但是可以引用。
<pre>a.com/index.html 可以引用b.com/main.js 可以引用b.com/style.css 可以引用b.com/logo.bng 但是a.com里面的b.com/main.js不能对b.com的资源进行读写(ajax报错)</pre>

2. 什么是跨域?跨域有几种实现形式?

跨域:指不同脚本之间的相互访问,由于浏览器同源策略的限制,不同域名下的脚本之间不可以相互读写数据,这种情况下我们就需要用到跨域请求。
跨域的情况:

跨域的形式:

3. jsonp 的原理是什么?

原理:因为通过script标签引入的js是不受同源策略的限制的,所以我们可以通过script标签引入一个js或者是一个其他后缀形式(如php,jsp等)的文件,此文件返回一个js函数的调用,如返回JSONP_getUsers(["mike","john","ruby"]),也就是说此文件返回的结果调用了JSONP_getUsers函数,并且把["mike","john","ruby"]传进去,这个["mike","john","ruby"]是一个用户列表。那么如果此时我们的页面中有一个JSONP_getUsers函数,那么JSONP_getUsers就被调用到,并且传入了用户列表。此时就实现了在本域获取其他域数据的功能,也就是跨域。

4. CORS是什么?

CORS 全称是跨域资源共享(Cross-Origin Resource Sharing),它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制,实现原理是服务器在响应头加入Access-Control-Allow-Origin字段,如果发出请求的网站包含在被请求网站的允许名单中,就能实现跨域AJAX请求,它支持现代浏览器,IE支持10以上。

练习

本地搭建服务器,演示同源策略。

  1. 本地搭建服务器(如果使用 SAE 可创建不同的代码版本,这样可通过1.xxx.sinapp.com和2.xxx.sinapp.com 访问了)
  1. 修改 本地host,通过不同域名访问本地服务器。比如访问http://a.com/index.html, http://b.com/ajax.php,本质是

  2. 在 index.html 里使用 ajax 接口访问 http://b.com/ajax.php 里的数据。

  3. 查看输出报错

  4. 同个IP不同域名:通过设置hosts文件,对本机127.0.0.1设置多个域名


  5. http://snow.com/task31.html里使用ajax接口访问http://xmz.com/ajax.php

    snow.com/task31.html
xmz.com/ajax.php

ajax请求发送失败,查看输出报错:

至少使用一种方式解决跨域问题

成功获取到了xmz.com/ajax.php的数据,输出结果如下:


snow.com/task31-1.htm xmz.com/ajax.php

输出结果:

本文版权归本人和饥人谷所有,转载请注明来源。

上一篇 下一篇

猜你喜欢

热点阅读