美文网首页饥人谷技术博客
同源策略、跨域、jsonp

同源策略、跨域、jsonp

作者: 嘿菠萝 | 来源:发表于2016-11-29 23:11 被阅读104次

问答

  • 什么是同源策略

    同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。

    浏览器出于安全方面的考虑,只允许与本域下的接口交互。不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源。
    本域指的是同协议,同域名,同端口。
    简单来说,同协议,同域名,同端口即为同源。例如http://jirengu.com:80/a/b.jshttp://jirengu.com:80/index.php (同源)

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

只要协议、域名、端口有任何一个不同,都被当作是不同的域。 跨域是指不同域名的脚本之间的相互访问,由于浏览器同源策略的限制,不同域名下的脚本之间不可以相互读写数据,但是在实际应用中,很多场景下是需要实现跨域请求的,跨域是为了突破同源策略的限制,它的的实现形式有:

1.降域: 对于在相同的父级域名下的例子,可以通过设置document.domain的办法来解决。 例如:http://a.jrg.com/a.html
http://b.jrg.com/b.html可以在a.html中加上document.domain = ‘jrg.com
;然后通过在a.html创建一个iframe,去控制iframe的contentDocument,这样两个js文件之间就可以“交互”了. (若在不同文件,分别添相应的document.domain)。不过,此方法限定了要在相同的父级域名下,有局限。

2.JSONP: 由于直接用 XMLHttpRequest 请求不同域上的数据是不可以的。这种方式主要是通过动态插入一个 script 标签。浏览器对 script 的资源引用没有同源限制,同时资源加载到页面后会立即执行(没有阻塞的情况下)

3.CORS(Cross-Origin Resource Sharing): CORS 全称是跨域资源共享(Cross-Origin Resource Sharing),是一种 ajax 跨域请求资源的方式,支持现代浏览器,IE支持10以上。
实现方式很简单,当你使用 XMLHttpRequest 发送请求时,浏览器发现该请求不符合同源策略,会给该请求加一个请求头: Origin ,后台进行一系列处理,如果确定接受请求则在返回结果中加入一个响应头: Access-Control-Allow-Origin ; 浏览器判断该相应头中是否包含 Origin 的值,如果有则浏览器会处理响应,我们就可以拿到响应数据,如果不包含浏览器直接驳回,这时我们无法拿到响应数据。
4. postMessage: 即跨文档消息传输,通过postMessage方法指明需要传递的数据,以及目标域名,接收端添加事件监听message,通过事件的origin属性判断发送请求的域名,符合要求就接收数据,客户端的方法和服务端的监听必须配套使用。 (只有在window窗口中才有postMessage方法,相当于在页面中嵌入了几个iframe,postMessage能使几个iframe之间进行交互)

  • jsonp 的原理是什么

html中script标签可以引入其他域下的js,比如引入线上的jquery库。利用这个特性,可实现跨域访问接口。需要后端支持
如:res.send(cb + '('+ JSON.stringify(data) + ')');
1.定义数据处理函数_fun
2.创建script标签,src的地址执行后端接口,最后加个参数callback=_fun
3.服务端在收到请求后,解析参数,计算返还数据,输出 fun(data) 字符串。
4.fun(data)会放到script标签做为js执行。此时会调用fun函数,将data做为参数。范例见练习。

  • CORS是什么

CORS 全称是跨域资源共享(Cross-Origin Resource Sharing),是一种 ajax 跨域请求资源的方式,支持现代浏览器,IE支持10以上。 实现方式很简单,当你使用 XMLHttpRequest 发送请求时,浏览器发现该请求不符合同源策略,会给该请求加一个请求头:Origin,后台进行一系列处理,如果确定接受请求则在返回结果中加入一个响应头:Access-Control-Allow-Origin; 浏览器判断该相应头中是否包含 Origin 的值,如果有则浏览器会处理响应,我们就可以拿到响应数据,如果不包含浏览器直接驳回,这时我们无法拿到响应数据。所以 CORS 的表象是让你觉得它与同源的 ajax 请求没啥区别,代码完全一样。
("Access-Control-Allow-Origin", "http://b.com:8080");//允许b.com:8080跨越
("Access-Control-Allow-Origin", "*"); //允许所有的域名跨越
----本文版权归本人和饥人谷所有,请勿转载

相关文章

  • 前端基础(问答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/cvyfuttx.html