美文网首页
同源策略、跨域、JSONP

同源策略、跨域、JSONP

作者: Timmmmmmm | 来源:发表于2017-02-01 23:09 被阅读59次

1. 什么是同源策略?

同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互

一个源的定义:如果协议,端口(如果指定了一个)和主机对于两个页面是相同的,则两个页面具有相同的源。

拓展:浏览器的同源策略_MDN

2. 什么是跨域?跨域有几种请求?

跨域:从一个页面去请求读或者写另一个页面的资源,突破同源策略的限制。

跨域有以下几种请求:

  • 降域,主域名相同,子域不同的,如:child1.a.com 和 a.com,可通过设置document.domain = 'a.com' 达到降域的目的,实现跨域访问
  • JSONP (JSON with padding),由回调函数数据组成。回调函数是当响应到来时应该在页面中调用的函数。回调函数一般是在请求中制定的。而数据就是传入回调函数中的 JSON 数据
  • CORS (Cross-Origin Resource Sharing) 跨源资源共享,定义了在必须访问跨域资源时,浏览器与服务器应该如何沟通。CORS 就是使用自定义的 HTTP 头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功,还是应该失败
  • HTML5 的 postMessage

拓展:JavaScript跨域总结与解决办法

3. JSONP 的原理是什么?

原理是利用 script 标签的可跨域性,在网页中动态创建添加 script 标签,请求需要访问的页面资源的 URL,服务器降数据放在一个知道指定名字的回调函数给传回来,由于网页已经定义了回调函数,参数返回之后,就会执行

4. CORS 是什么?

  • CORS 需要浏览器和服务器同时支持。目前所有浏览器都支持这个功能,IE10 以下不完全支持
  • 整个 CORS 通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS 通信与同源 AJAX 通信没有差别,代码完全一样,浏览器一旦发现 AJAX 请求跨域,就会自动添加一些附加的头部信息,有时还会多出一次附加的请求,但用户不会有感觉

实例:(a.com 请求 b.com 的资源)

在发送请求时,浏览器给它附加一个额外的 Origin 头部,Origin: http://www.a.com。如果服务器认为这个请求可以接受,就在 Access-Control-Allow-Origin: http://www.a.com 头部中回发相同的源信息(如果是公共资源,可以回发 "*")

如果没有这个头部,或者有这个头部但源信息不匹配,浏览器就回驳回请求。正常情况下,浏览器会处理请求。注意,请求和响应都不包含 cookie 信息

拓展:跨资源共享 CORS 详解

代码:

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

a.com 请求 b.com

// a.com/
$.get('//b.com/b_data.php', function(response) {
  console.log(response);
});
// b_data.php
echo 1234;
同源策略.png

2. 解决跨域问题

1. 使用 JSONP

// a.com/a_JSONP.html
function xxx(data) {
  alert(data);
}

// 添加 script 标签
function addScriptTag(src) {
  var script = document.createElement('script');
  script.src = src;
  document.body.appendChild(script);
}

window.onload = function() {
  addScriptTag('http://b.com/b_JSONP.php?callback=xxx');
}
// b.com/b_JSONP.php
$data=$_GET['callback'];
echo $data . '(' . 1234 . ')';
使用 JSONP.png

2. 使用 CORS

// a.com/a_CORS.html
$.get('//b.com/b_CORS.php', function(response) {
  alert(response);
});
// b.com/b_CORS.php
header("Access-Control-Allow-Origin: http://a.com");
echo "b.com的数据";
使用 CORS.png

相关文章

  • 前端基础(问答23)

    keywords: 同源策略、跨域、jsonp。 什么是同源策略(same origin policy) 同源:协...

  • 跨域

    主要内容: 同源策略、跨域实现形式(JSONP、CORS、降域、postMessage) 同源策略 (Same o...

  • 做demo和学习过程当中遇到的一些问题,收集的博文

    轻松搞定JSONP跨域请求--->关键字: 跨域, 同源策略, JSONP原理 git拉取远程分支到本地 git ...

  • jsonp

    jsonp的跨域原理解析 背景: 由于浏览器同源策略的限制,非同源下的请求,都会产生跨域问题,jsonp就是为了解...

  • Jsonp 跨域原理

    Jsonp 跨域原理。(摘选) 浏览器的同源策略把跨域请求都禁止了,但是页面中的 标签是例外,不受同源策略限...

  • 什么是跨域

    被同源策略限制的都叫做跨域,域名,端口,协议一只就要同源策略 如果跨域 1、jsonp 2、nginx反向代理 3...

  • 同源策略与跨域

    跨域就是违背了同源策略解决跨域的方法有:jsonp,cors和服务器代理

  • 常见跨域解决方案

    跨域 JSONP 使用 标签不受同源策略影响的特性,作为Ajax传输技术称为JSONP。 使用JSONP时,需要服...

  • Jsonp的实现原理

    1. Jsonp Jsonp: 主要是用来获取跨域的请求,由于同源策略的限制,我们不能获取跨域的资源 2. Jso...

  • Ajax跨域 —— Jsonp

    同源策略 同源/同域即域名、协议、端口号相同 JSONP(JSON with Padding) 是一种跨域请求方式...

网友评论

      本文标题:同源策略、跨域、JSONP

      本文链接:https://www.haomeiwen.com/subject/whdlittx.html