同源策略、跨域、jsonp

1.什么是同源策略

同源是指同协议、同域名、同端口号,可以通过location.origin来查看一个完整的源,同源策略的目的是为了保证用户信息的安全,防止恶意的网站窃取数据。不同源有以下三种行为受到限制:

  • Cookie、LocalStorage 和 IndexDB 无法读取。
  • DOM 无法获得。
  • AJAX 请求不能发送。

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

  • 跨域指的是从一个域名的网页去请求另一个域名的资源
  • 实现跨域的形式:
    (1) 降域
    (2)JSONP
    (3)CORS


    同源策略、跨域、jsonp_第1张图片
    兼容性

    (4)HTML5中的PostMessage方法
    (5)通过hash方法
    (6)通过window.name的方法

3.jsonp 的原理是什么

就是利用 ,并提供一个回调函数来接收数据(函数名可约定,或通过地址参数传递)。第三方产生的响应为json数据的包装(故称之为jsonp,即json padding),形如: callback({"name":"hax","gender":"Male"}) 这样浏览器会调用callback函数,并传递解析后json对象作为参数。本站脚本可在callback函数里处理所传入的数据。

4.CORS是什么

CORS是一个W3C标准,即Cross-origin resource sharing,全称是"跨域资源共享"。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制,但CORS需要浏览器和服务器同时支持。

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

  • 找到hosts文件,修改hosts文件,在同一个IP下绑定a.xxk.com和b.xxk.com两个域名。


    同源策略、跨域、jsonp_第2张图片
    绑定域名
  • a.xxk.com/task31/task31.html下的内容:


  
    
    
  
  
    你好
    
    
  

  • b.xxk.com/task31/task31.php下的内容:

  • 演示结果


    同源策略、跨域、jsonp_第3张图片
    运行结果

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

  • 使用CORS,在task31.php中添加:
header("Access-Control-Allow-Origin: http://a.xxk.com");
同源策略、跨域、jsonp_第4张图片
演示结果
  • 使用JSONP
    a.xxk.com/task31/task31.html的内容:


  
    
    
  
  
    你好
    
  

b.xxk.com下的task31.php:

fn("nihao")
同源策略、跨域、jsonp_第5张图片
演示结果

你可能感兴趣的:(同源策略、跨域、jsonp)