跨域 #29

简介: 跨域 #29

跨域


跨域是指:a页面想要访问b页面,但是这两个页面的域名、端口、协议不同。而浏览器为了保证安全,只允许同源访问。所以就出现了跨域的问题。


同源策略


指ab页面域名、端口、协议一样。


解决方案


jsonp解决:jsonp利用script标签可以访问任何链接的原理,通过目标服务器设置一个callback,来进行跨域。

//Js 客户端 方法一
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />  
<script type="text/javascript">  
    function jsonpCallback(result) {  
        //alert(result);  
        for(var i in result) {  
            alert(i+":"+result[i]);//循环输出a:1,b:2,etc.  
        }  
    }  
    var JSONP=document.createElement("script");  
    JSONP.type="text/javascript";  
    JSONP.src="http://crossdomain.com/services.php?callback=jsonpCallback";  
    document.getElementsByTagName("head")[0].appendChild(JSONP);  
</script>
//Js 客户端 方案二
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />  
<script type="text/javascript">  
    function jsonpCallback(result) {  
        alert(result.a);  
        alert(result.b);  
        alert(result.c);  
        for(var i in result) {  
            alert(i+":"+result[i]);//循环输出a:1,b:2,etc.  
        }  
    }  
</script>  
<script type="text/javascript" src="http://crossdomain.com/services.php?callback=jsonpCallback"></script>
//Jq 客户端 方案二
<script type="text/javascript" src="jquery.js"></script>  
<script type="text/javascript">  
    $.ajax({  
        url:"http://crossdomain.com/services.php",  
        dataType:'jsonp',  
        data:'',  
        jsonp:'callback',  
        success:function(result) {  
            for(var i in result) {  
                alert(i+":"+result[i]);//循环输出a:1,b:2,etc.  
            }  
        },  
        timeout:3000  
    });  
</script>
<?php  
//服务端返回JSON数据  
$arr=array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);  
$result=json_encode($arr);  
//echo $_GET['callback'].'("Hello,World!")';  
//echo $_GET['callback']."($result)";  
//动态执行回调函数  
$callback=$_GET['callback'];  
echo $callback."($result)";


通过设置Access-Control-Allow-Origin

允许任何域名进行访问
header('Access-Control-Allow-Origin:*');  
// 响应类型  
header('Access-Control-Allow-Methods:POST');  
// 响应头设置  
header('Access-Control-Allow-Headers:x-requested-with,content-type');
也可以设置特定的域名进行访问
const ALLOW_ORIGIN = [
  'https://downfuture.com',
  'http://www.downfuture.com',
  'https://www.downfuture.com',
  'https://www.downfuture.com:9000',
  'https://downfuture.com:9000',
  'downfuture.com:9000',
  'localhost:9000',
  'http://localhost:8080'
];
let headers = ALLOW_ORIGIN[x];
header("Access-Control-Allow-Origin",  headers);


通过Nginx反向代理

server {
        listen   8094;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
       location / {
            root   html;
            index  index.html index.htm;
        }
        location /apis {
            rewrite  ^.+apis/?(.*)$ /$1 break;
            include  uwsgi_params;
           proxy_pass   http://localhost:1894;
        }
}
目录
相关文章
|
人工智能 边缘计算 运维
AI 时代下,操作系统的进化与重构
随着人工智能(AI)的迅猛发展,操作系统面临着前所未有的挑战和机遇。在这个新时代,操作系统需要进行深刻的进化与重构,以适应AI技术的广泛应用和不断变化的需求。
483 5
|
11月前
|
物联网
物联网卡没使用会产生费用吗
物联网卡的使用费用情况通常取决于多个因素,包括卡片的类型、服务商的政策、套餐选择以及是否激活并实际使用等。对于“物联网卡没使用是否会产生费用”这一问题,答案并非绝对,而是需要根据具体情况来判断。
|
12月前
|
前端开发 JavaScript 安全
深入解析 http 协议
HTTP(超文本传输协议)不仅用于传输文本,还支持图片、音频和视频等多种类型的数据。当前广泛使用的版本为 HTTP/1.1。HTTPS 可视为 HTTP 的安全增强版,主要区别在于添加了加密层。HTTP 请求和响应均遵循固定格式,包括请求行/状态行、请求/响应头、空行及消息主体。URL(统一资源定位符)用于标识网络上的资源,其格式包含协议、域名、路径等信息。此外,HTTP 报头提供了附加信息,帮助客户端和服务端更好地处理请求与响应。状态码则用于指示请求结果,如 200 表示成功,404 表示未找到,500 表示服务器内部错误等。
270 0
深入解析 http 协议
|
API
MediaRecorder API的使用
MediaRecorder API的使用
235 0
|
关系型数据库 MySQL OLAP
PolarDB +AnalyticDB Zero-ETL :免费同步数据到ADB,享受数据流通新体验
Zero-ETL是阿里云瑶池数据库提供的服务,旨在简化传统ETL流程的复杂性和成本,提高数据实时性。降低数据同步成本,允许用户快速在AnalyticDB中对PolarDB数据进行分析,降低了30%的数据接入成本,提升了60%的建仓效率。 Zero-ETL特性包括免费的PolarDB MySQL联邦分析和PolarDB-X元数据自动同步,提供一体化的事务处理和数据分析,并能整合多个数据源。用户只需简单配置即可实现数据同步和实时分析。
|
前端开发 JavaScript 容器
第九章(应用场景篇)Qiankun微前端深度解析与实践教程
第九章(应用场景篇)Qiankun微前端深度解析与实践教程
554 0
|
弹性计算 运维 安全
阿里云轻量应用服务器:一款高效、稳定、安全的云计算服务
阿里云服务器ECS和轻量应用服务器有什么区别?轻量和ECS优缺点对比,云服务器ECS是明星级云产品,适合企业专业级的使用场景,轻量应用服务器是在ECS的基础上推出的轻量级云服务器,适合个人开发者单机应用访问量不高的网站博客、云端学习测试环境等,阿里云服务器网从从使用场景、适用人群、计费方式、系统镜像、网络带宽、运维管理等多方面来详细说下二者区别及如何选择
466 1
无法将参数1从“const char [6]”转换为“char *”的解决方法
无法将参数1从“const char [6]”转换为“char *”的解决方法
|
监控 安全 项目管理
GitLab 面试题及答案整理,最新面试题
GitLab 面试题及答案整理,最新面试题
368 0
|
Java 测试技术 Maven
JUnit5学习之五:标签(Tag)和自定义注解
学习和实践JUnit5的标签过滤和自定义注解功能
233 1
JUnit5学习之五:标签(Tag)和自定义注解