Skip to content

跨域 #31

@Leon68

Description

@Leon68

1: 什么是同源策略

浏览器出于安全方面的考虑,只允许与本域下的接口交互。不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源。

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

同域:1.协议相同2域名相同3.端口相同
不满足同域三个条件就叫跨域。
实现跨域的方式:
JSONP,缺点不安全只支持get请求.
CORS,兼容性,ie10以上才能用
降域,适用于同一个网站里多个子网站相互请求数据,降到所有孩子用父亲名,就变同域了
postmanager:相互发送消息,要不要随你

3: JSONP 的原理是什么

先看例子:

<script src='http:/www.weather.com/weatherApi?hangzhou&callback'></script>
//返回数据后是这种格式
<script>
callback({
    name:hanzhou,
    temperature:42
})
</script>
//我的js中定义了一个callback函数
<script>
function callback(){
//....
}
callback()
</script>//到这里就获得了与我不同域的weather.com传回来的数据并且可以使用

原理:利用页面引用的js可以是不同域的文件这一特性。当然也需要与服务器约好,服务器配合传输数据才能实现。
缺点:有安全隐患,以为接受的数据是直接作为js运行,万一服务器不怀好意传输恶意js代码,那就玩完了,只支持get请求。

4: CORS是什么

cors有点像有名字有照片的专属通行证。这个通行证谁看?看门的(浏览器)浏览器发现网页跨域请求后给你加个标签(请求头),origin,服务器看到这个标签后会决定发不发通行证,通行证会有url,浏览器看这个通行证上地址跟你是不是同一人,是给你数据,不是对不起不给,就不给。为什么要这样做,看门的当然是为了安全。

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions