跨域及cors解决跨域

news2024/11/15 4:08:24

1.什么是跨域

出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的。javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)

协议,主机(ip),端口号,这三个有一个不同就属于跨域访问

跨域访问前端和后端不设置一些东西的话,不能访问

当前页面URL被请求页面URL是否跨域原因
http://www.test.com/http://www.test.com/index.html同源(协议、域名、端口)
http://www.test.com/https://www.test.com/index.html跨域协议不同
http://www.test.com/http://www.test1.com/跨域域名不同
http://www.test.com:8080/http://www.test.com:8081/跨域端口不同

2. 跨域问题的解决方案

比较常用的3种

1.Jsonp  最早的解决方案,利用script标签可以跨域的原理实现。

        前端解决方案,不知道好不好用,

2. nginx反向代理

        思路是:利用nginx反向代理把跨域改为不跨域,支持各种请求方式

        缺点:需要在nginx进行额外配置,语义不清晰

 3.CORS【重要】

  • 规范化的跨域请求解决方案,安全可靠。

    优势:

    • 在服务端进行控制是否允许跨域,可自定义规则

    • 支持各种请求方式            

        缺点:

                会产生额外请求

cors是一种机制,这种机制通过在http头部添加字段,

通常情况下,web应用A告诉浏览器,自己有权限访问应用B

 CORS的标准定义是:通过设置http头部字段,让客户端有资格跨域访问资源。通过服务器的验证和授权之后,浏览器有责任支持这些http头部字段并且确保能够正确的施加限制。

 JSON与CORS的比较

        1.JSONP 只能实现 GET 请求,而 CORS 支持所有类型的 HTTP 请求

        2.使用 CORS ,开发者可以是使用普通的 XMLHttpRequest 发起请求和获取数据,比起 JSONP 有更好的错误处理

        3.虽然绝大多数现代的浏览器都已经支持 CORS,但是 CORS 的兼容性比不上 JSONP,一些比较老的浏览器只支持 JSONP

 3.SpringBoot通过CORS实现跨域

3.1 使用注解实现跨域

@CrossOrigin(origins = "*")
@Slf4j
@RestController
public class EmployeeController {
    
}

@RestController
@CrossOrigin(origins = "*")//实行全局跨域
@Slf4j
public class HelloController {
    @Reference
    private HelloService helloService;

    @GetMapping(value = "/hello",name = "测试")
    public ResponseEntity hello(@RequestParam String name){
        String hello = helloService.hello(name);
        return ResponseEntity.ok(hello);
    }

}
@RestController
public class HiController {

    @Reference
    private HiService hiService;

    @GetMapping(value = "/hi")
    public ResponseEntity hiName(@RequestParam String name){
        String respHiName = hiService.hiName(name);
        return ResponseEntity.ok(respHiName);
    }

}

 我们可以看到,后端有连个controller   HiController中没有添加@CrossOrigin(origins = "*")

跨域访问试试看

 前端:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="js/axios-0.18.0.js"></script>
</head>
<body>
  <button id="hello">hello</button>
  <button id="hi">hi</button>
  <script>
    var hello = document.getElementById("hello");
    var hi = document.getElementById("hi");
    hello.onclick = function(){
      axios.get("http://localhost:8082/hello?name=张三")
      .then(resp=>{
        alert(resp.data);
      })
    }
    hi.onclick = function(){
      axios.get("http://localhost:8082/hi?name=张三")
      .then(resp=>{
        alert(resp.data);
      })
    }
  </script>
</body>
</html>

 

 

 首先肯定是跨域,点击hi 的话会报错,当hiController中添加@CrossOrigin(origins = "*")

就ok了

 

2.通过全局配置解决跨域请求

 如果说你有好多Controller 每一个都要配置,那么不值当的,所有可以用这种方法

@Configuration
public class DemoWebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")  // 匹配了所有的URL
                .allowedHeaders("*")  // 允许跨域请求包含任意的头信息
                .allowedMethods("*")  // 设置允许的方法
                .allowedOrigins("*")  // 设置允许跨域请求的域名
                .allowCredentials(false);  // 是否允许证书,默认false
    }
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/12573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DJ11 8086系列处理器(第二节课)

目录 一、8088CPU的系统总线 1. 最小模式 2. 最大模式 二、8086/8088 CPU 的功能结构 1. 8086/8088 CPU 的内部结构 2. 8086/8088 CPU 的内部寄存器 1&#xff09;通用寄存器 2&#xff09;段寄存器 3&#xff09;控制寄存器 三、8086/8088 CPU 的存储器组织 1. 物…

超级账本Fabric的世界状态操作与账本操作

在 Hyperledger Fabric 中&#xff0c;账本由两个不同但相关的部分组成 - 世界状态和区块链。 世界状态&#xff1a; 一个数据库&#xff0c;其中存储了一组帐本状态的当前值的缓存。世界状态使程序可以轻松地直接访问状态的当前值&#xff0c;而不必通过遍历整个交易日志来计…

PROTAC与抗体偶联药物的结合

PROTAC 的靶点真核生物的蛋白降解途径主要分为溶酶体途径、泛素蛋白酶体途径、胞液蛋白酶水解途径和线粒体蛋白酶途径等四种 (图1)。其中&#xff0c;PROTAC 所依赖的蛋白酶体途径主要针对细胞周期蛋白、转录因子、细胞表面受体以及胞内变性蛋白等进行降解。 图 1. 不同蛋白降…

《安富莱嵌入式周报》第291期:分分钟设计数字芯片,单片机版JS,神经网络DSP,microPLC,FatFS升级至V0.15,微软Arm64 VS正式版发布

往期周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版&#xff1a; https://www.bilibili.com/video/BV1Dd4y1b74x 《安富莱嵌入式周报》第291期&#xff1a;分分…

分享几个小技巧教你图片怎么加边框

大家平时出去玩的时候&#xff0c;肯定没少拍摄照片吧&#xff1f;那你们都是怎么对图片进行修饰的呢&#xff1f;我比较喜欢给图片加上一些边框线条&#xff0c;这样子的图片会比较有意境&#xff0c;能凸显我想要表达的意思。那么大家知道怎么在图片里加边框吗&#xff1f;今…

【Vue.js设计与实现】第4章 响应系统的作用与实现

前言&#xff1a; 本文是我看的Vue.js设计与实现这本书第二篇 响应系统 的第4章 响应系统的作用与实现的一些总结与收获。 第4章从宏观视角讲述了Vue.js 3.0中响应系统的实现机制。从副作用函数开始&#xff0c;逐步实现一个完善的响应系统&#xff0c;还讲述了计算属性和watch…

java计算机毕业设计基于安卓Android的在线心理咨询与健康App

项目介绍 本文介绍了心理咨询与健康App软件开发建设的意义和国内外发展现状,然后详细描述了所开发手机APP的可行性分析,并分析了手机APP所要实现的功能。因为心里咨询设施较多,而且人口密集,不能更好的管理健康问题,造成需要时人员不必要的身心伤害,所以采用比较方便的、容易便…

Linux基本指令(下)

Linux基本指令&#xff08;下&#xff09;前言cat指令more命令less命令head命令tail命令wc指令date指令cal指令find指令grep指令top命令alias命令zip/unzip命令前言 上一篇Linux基本指令主要讲解了关于文件操作方面的指令&#xff0c;接下来这一片Linux基本指令主要讲解一下关…

聊聊推荐系统的评测(下)

这是鼎叔的第三十九篇原创文章。 行业大牛和刚毕业的小白&#xff0c;都可以进来聊聊。 欢迎关注本人专栏和微信公众号《敏捷测试转型》&#xff0c;大量原创思考文章陆续推出。 上篇请查阅&#xff1a;聊聊推荐系统的评测&#xff08;上&#xff09; 下篇&#xff0c;我们…

基于SSM的旅游景点购票管理系统

1、项目介绍 基于SSM的旅游景点购票管理系统拥有两种角色&#xff0c;管理员和用户 管理员&#xff1a;用户管理、景点管理、购票管理、酒店管理、客房管理、客房预订管理、轮播图管理等 用户&#xff1a;登录注册、景区购票、评论、预订客房、收藏、发布攻略等 2、项目技术…

App推广渠道追踪技术更新及应用

如今App推广渠道追踪对App厂商来说非常重要&#xff0c;因为App厂商需要通过渠道追踪来寻找成本最低的和价值最高的获客渠道。 但是现在线上渠道的选择五花八门&#xff0c;比如各种新闻门户网站、字节系平台、腾讯系平台等&#xff0c;那么到底该花多少钱去获取用户&#xff…

本地浏览器打开远程服务器上的Jupyter Notebook

文章目录一、配置过程二、其他需求后台运行Jupyter端口映射实验环境及需求&#xff1a;远程服务器配置了 Jupyter Notebook&#xff0c;本地电脑没有相关的环境&#xff0c;想要在服务器端启动 Jupyter Notebook&#xff0c;然后直接从本地浏览器打开进行操作。 一、配置过程 …

【百度AI_文字识别】示例身份证图片识别(代码官方文档完整,只需获得修改参数、下载类)

文章目录提取身份证信息第一步&#xff1a;登录第二步&#xff1a;获取资源第三步&#xff1a;获取access_token参数&#xff08;AuthService.java&#xff09;第四步&#xff1a;请求代码Idcard.java第五步&#xff1a;修改Idcard.java文件注意&#xff1a;返回错误提取身份证…

【跨境电商卖家】Instagram营销初学者指南(一):重要性、优势

关键词&#xff1a;跨境电商卖家、instagram营销 1.为什么 Instagram 营销对企业很重要&#xff1f; Instagram 是接触大量受众的完美渠道——每月有超过10 亿活跃用户。平均而言&#xff0c;用户每天在 Instagram 上花费 53 分钟&#xff0c;这使得该平台成为仅次于Facebook的…

微信网页支付小白指南-域内浏览器支付 + 外部浏览器支付

关于微信网页支付&#xff0c;分为微信域内浏览器支付 外部浏览器支付&#xff0c;两者还是稍微有点点区别的&#xff0c;内部浏览器即在微信内打开网页&#xff0c;进行支付&#xff0c;支付调用是需要开通JSAPI支付方式&#xff1b;而外部浏览器「比如浏览器等」则需要开通 …

Leetcode刷题day2|数组二|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

文章目录一、有序数组的平方错误的尝试思路注意AC代码暴力版本双指针方法二、长度最小的子数组错误的尝试思路滑动窗口介绍注意AC代码三、螺旋矩阵错误的尝试思路注意AC代码继承前边循环变量的写法不继承前边循环变量的做法四、数组做题思路总结基本知识解题思路一、有序数组的…

将爱心代码设为电脑屏保,俘获少女芳心,还能假装黑客,在酷炫的界面中保护隐私

本文介绍 Hacker Screen Saver 一款开源 Windows 屏保的使用。Hacker Screen Saver 是一款 .NET 设计的屏幕保护程序&#xff0c;可以显示 HTML 页面&#xff0c;你可以将黑客模拟器的网页&#xff0c;或者爱心代码网页设置为你的 Windows 电脑屏保。详细介绍了软件的使用和对应…

apritag 定位记录 C++ opencv 3.4.5

参考&#xff1a;2021-06-23 基于AprilTag的位姿估计&#xff0c;原理&#xff0c;完整代码&#xff08;相机坐标系、世界坐标系&#xff09; - 简书 Apriltag使用之二&#xff1a;方位估计(定位)_arczee的博客-CSDN博客_apriltag位姿估计 1.AprilTag概述 AprilTag是一种视觉…

Matlab:绘制日期时间

Matlab&#xff1a;绘制日期时间绘制日期时间数据指定坐标区范围指定刻度值指定刻度格式存储日期时间的坐标区属性导出和转换数据提示值绘制来自文件的日期时间数据此示例说明如何使用存储为 datetime 和 duration 数组的日期时间创建线图。datetime 数据类型表示时间点&#x…

Linux I/O 原理和 Zero-copy 技术全面分析

两万字长文从虚拟内存、I/O 缓冲区&#xff0c;用户态&内核态以及 I/O 模式等等知识点全面而又详尽地剖析 Linux 系统的 I/O 底层原理&#xff0c;分析了 Linux 传统的 I/O 模式的弊端&#xff0c;进而引入 Linux Zero-copy 零拷贝技术的介绍和原理解析&#xff0c;将零拷贝…