跨域是什么问题_跨域是什么意思 怎么解决

跨域是什么问题_跨域是什么意思 怎么解决解决好跨域,让我们愉快的开发吧

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

? 什么是跨域

  • 域: 是指浏览器不能执行其他网站的脚本
  • 跨域: 它是由浏览器的 同源策略 造成的,是浏览器对 JavaScript 实施的安全限制,所谓同源(即指在同一个域)就是两个页面具有相同的协议 protocol,主机 host 和端口号 port 则就会造成 跨域


跨域是什么问题_跨域是什么意思 怎么解决

域名组成

? 跨域场景

  • 场景的跨域场景有哪些,请参考下表
当前url 请求url 是否跨域 原因
http://www.autofelix.cn http://www.autofelix.cn/api.php 协议/域名/端口都相同
http://www.autofelix.cn https://www.autofelix.cn/api.php 协议不同
http://www.autofelix.cn http://www.rabbit.cn 主域名不同
http://www.autofelix.cn http://api.autofelix.cn 子域名不同
http://www.autofelix.cn:80 http://www.autofelix.cn:8080 端口不同

? 解决跨域的四种方式

  • nginx的反向代理
  • 使用 nginx 反向代理实现跨域,是最简单的跨域方式
  • 只需要修改 nginx 的配置即可解决跨域问题,支持所有浏览器,支持session,不需要修改任何代码,并且不会影响服务器性能
// nginx配置
server {
    listen       81;
    server_name  www.domain1.com;
    location / {
        proxy_pass   http://www.domain2.com:8080;  #反向代理
        proxy_cookie_domain www.domain2.com www.domain1.com; #修改cookie里域名
        index  index.html index.htm;
 
        # 当用webpack-dev-server等中间件代理接口访问nignx时,此时无浏览器参与,故没有同源限制,下面的跨域配置可不启用
        add_header Access-Control-Allow-Origin http://www.domain1.com;  #当前端只跨域不带cookie时,可为*
        add_header Access-Control-Allow-Credentials true;
    }
}
  • jsonp请求
  • jsonp 是服务器与客户端跨源通信的常用方法。最大特点就是简单适用,兼容性好 兼容低版本IE,缺点是只支持 get 请求,不支持 post 请求
  • 原理时网页通过添加一个 <script> 元素,向服务器请求 json 数据,服务器收到请求后,将数据放在一个指定名字的回调函数的参数位置传回来
//jquery实现
<script>
$.getJSON('http://autofelix.com/api.php&callback=?', function(res) {
     // 处理获得的数据
     console.log(res)
});
</script>
  • 后端语言代理
  • 可以通过一种没有跨域限制的语言中转一下,通过后端语言去请求资源,然后再返回数据
  • 比如 http://www.autofelix.cn 需要调用 http://api.autofelix.cn/userinfo 去获取用户数据,因为子域名不同,会有跨域限制
  • 可以先请求 http://www.autofelix.cn 下的 php 文件,比如 http://www.autofelix.cn/api.php,然后再通过该 php 文件返回数据
// api.php 文件中的代码
public function getCurl($url, $timeout = 5)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    $result = curl_exec($ch);
    curl_close($ch);

    return $result;
}

$result = getCurl('http://api.autofelix.cn/userinfo');

return $result;
  • 后端语言的设置
  • 主要通过后端语言主动设置跨域请求,这里以 php 作为案例
// 允许所有域名访问
header('Access-Control-Allow-Origin: *');
// 允许单个域名访问
header('Access-Control-Allow-Origin: https://autofelix.com');
// 允许多个自定义域名访问
static public $originarr = [
   'https://autofelix.com',
   'https://baidu.com',
   'https://csdn.net',
];

// 获取当前跨域域名
$origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';
if (in_array($origin, self::$originarr)) {
    // 允许 $originarr 数组内的 域名跨域访问
    header('Access-Control-Allow-Origin:' . $origin);
    // 响应类型
    header('Access-Control-Allow-Methods:POST,GET');
    // 带 cookie 的跨域访问
    header('Access-Control-Allow-Credentials: true');
    // 响应头设置
    header('Access-Control-Allow-Headers:x-requested-with,Content-Type,X-CSRF-Token');
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170849.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月16日 下午7:36
下一篇 2022年8月16日 下午7:36


相关推荐

  • ESP8266开发之旅 基础篇① 走进ESP8266的世界

    ESP8266开发之旅 基础篇① 走进ESP8266的世界欢迎大家来到 ESP8266 的世界 从现在开始 笔者将带领大家慢慢揭开 ESP8266 神秘的面纱 1 简介 从笔者的角度来说 ESP8266 这个词可以理解为 ESP8266EX 芯片 当然 后面也有可能出现了其他芯片 这里首推 ESP8266EX 以及依赖 ESP8266EX 芯片开发的系列模组的简称 ESP8266EX 是由乐鑫信息科技公司 Espressif 出品的一款应用于物联

    2026年3月19日
    1
  • 静态变量与全局变量的区别

    静态变量与全局变量的区别静态局部变量和普通全局变量以及静态全集变量在编译时 编译器会自动给他们分配地址 而且是从 MCU 上电运行开始 一直驻留 不会被回收的 而真正的区别在于他们的作用域 静态局部变量的作用域是在于定义它的那个函数内 由于其在编译时编译器就给他们分配了地址 并且做了初始化 所以它只能被初始化一次 而且看起来的顺序是程序每执行到这个函数时 都会执行那条定义语句 其实并 没 有 因为它已经被分配地址了

    2026年3月18日
    2
  • 快速图像配准

    快速图像配准图像配准是图像处理的基本任务之一 早在 70 年代 人们就开始了图像配准方面的研究 从最简单的模板匹配校正图像平移 到 90 年代中期开始的对于多模态图像配准的广泛研究 近年来在对配准技术的研究涵盖了多个应用领域 在计算机视觉及模式识别 医学图像分析 遥感数据处理 机器人学 计算机辅助设计与制造 天文学等学科中配准技术均占有举足轻重的地位 其中前三个应用领域中针对图像的配准技术的研究扩展的较多 图像配准已成为很多研究课题的必备环节 并且成为各类问题中提高精度和有效性的瓶颈 图像配准是将不同时间 不同传感器 成像

    2026年3月18日
    2
  • Linux重启网卡的方法「建议收藏」

    Linux重启网卡的方法「建议收藏」重启网卡的几种方法:一、network利用root帐户#servicenetworkrestart二、ifdown/ifup#ifdowneth0#ifupeth0三、ifconfig#ifconfigeth0down#ifconfigeth0up

    2026年2月15日
    7
  • 全网爆火的Kimi-k2驱动Claude Code亲测可食用版本来了「附详细配置」

    全网爆火的Kimi-k2驱动Claude Code亲测可食用版本来了「附详细配置」

    2026年3月16日
    2
  • Pytorch打怪路(一)pytorch进行CIFAR-10分类(1)CIFAR-10数据加载和处理

    Pytorch打怪路(一)pytorch进行CIFAR-10分类(1)CIFAR-10数据加载和处理pytorch 进行 CIFAR 10 分类 1 CIFAR 10 数据加载和处理 1 写在前面的话这一篇博文的内容主要来自于 pytorch 的官方 tutorial 然后根据自己的理解把 cifar10 这个示例讲一遍 权当自己做笔记 因为这个 cifar10 是官方 example 所以适合我们拿来先练手 至少能保证代码的正确性 之所以第一篇 pytorch 的博文 其实之前还写了篇如何安装 pytorch

    2026年3月16日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号