常见的几种跨域方法

一、域和跨域

域:

根据字面意思我们可以地域、区域。比如我国分为七大区域,每个区域又划分为省市区等:

而互联网上的域,我们可以理解为在互联网上占据的区域。

跨域:

如果现在有两个服务器在服务器上:服务器A 、服务器B。

访问服务器A得到一个页面index.html 从该index.html页面发出一个http请求,如果请求的是A上的内容,这是允许的,

因为index.html的源在A上。但是如果发送的http请求,请求的是B服务器上的内容。这就是跨域。

那什么是同域:协议相同、域名相同,端口相同,只要其中一个不同就为跨域。


二.同源策略

请求的url地址,必须与浏览器上的url地址相同,在同一个域上。

例如:用AJAX发送请求

$.ajax({
	url: "http://localhost:3000/test",
	type: "get",
	data: {
		
	},
	dataType: "json",
	success: function(data) {
		console.log(data);
	}
})

通过浏览器访问:


此时,会比较ajax的目标域 与当前index.html文件所在域是否同源

AJAX: http://localhost:3000

index.html: http://192.168.2.187:3000 

发现域名不一样,此时就会报错


上面就是javascript的同源保护策略,该策略属于安全层面的策略。


三.JSONP

AJAX直接请求普通文件存在跨域无权限访问的问题,不管是静态资源也好。

JSONP 全称是JSON with Padding,是为了解决跨域请求资源而产生的解决方案。

拥有scr这个属性的标签都可以跨域例,比如<script><img><iframe>。

JSONP原理: 利用script标签不受同源策略影响,并且还能够执行代码的特点。返回的是函数的执行。


四.JSONP跨域解决方案

4.1 基于script标签

<script type="text/javascript">
    function success(a) {
        console.log(a)
    }
</script>
<script type="text/javascript" src="http://localhost:3000/test?callback=success"></script>

得到的响应数据:



4.2 基于jQuery跨域

jquery已经把跨域封装到ajax上了,让跨域变得方便;注意:jQuery中的跨域请求是只能是get请求不能使用post请求。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>

<script src="js/jquery-1.12.3.min.js"></script> 
<script type="text/javascript">
    $(document).ready(function(){
            $.ajax({
            type : 'get',
            url:"http://localhost:3000/test",
            data : {
            },
            cache :false,
            jsonp: "callback",
            jsonpCallback:"success",
            dataType : 'jsonp',
            success:function(data){
                console.log(data);
            },
            error:function(data){
                console.log(data.error);
            }        
        });
    });
</script>
</body>
</html>
jsonp 传递给请求页面或数据的,用以获得jsonp回调函数名(默认为:callback)
jsonpCallback 自定义的jsonp回调函数名,默认为jQuery自动生成的随机函数名

请求头:ajax发送的url请求会自动带上callback参数,当服务端获取到这个参数值后,作为函数名返回回来.

响应头:返回一个函数的执行。


以上就是常用的jsonp解决跨域的两种方式,技术不精,如有错误,还请指正。部分类容参考网络,如有侵权会立即删除。













        



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值