解决跨域问题

server/2024/11/18 14:32:06/
什么是跨域

跨域指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。跨域只出现在前端,后端不会出现。

怎么解决跨域
1、使用nginx转发

同源策略只限制于浏览器端的服务器,当后端服务器访问后端服务器时即使是非同源也是可以正常访问。

前端jQuery发送ajax请求

$.ajax({url: 'http://localhost:8081/cors/1',type: 'GET',success: function (result) {console.log(result);}
})

nginx配置 

    server {listen       8081;server_name  localhost;location / {root   html;index  index.html index.htm;}location /cors/ {proxy_pass http://localhost:8080/user/;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
2、后端使用@CrossOrigin注解
@GetMapping("{id}")
@CrossOrigin("http://localhost:8081") // 跨域来源
public Result getUser1(@PathVariable Long id){User user = new User();return new Result<>(200, "success", user);
}
3、配置一个实现WebMvcConfigurer的配置类
@Configuration
public class CorsWebMvcConfigurer implements WebMvcConfigurer {/*** 全局Cors配置* @param registry*/@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/user/*") // 映射服务器中哪些接口允许跨域访问.allowedOrigins("http://localhost:8080") // 配置哪些来源有权限跨域访问.allowedMethods("GET", "POST", "DELETE", "PUT"); // 配置允许跨域访问的方法}
}
4、配置一个CorsFilter的Bean
@Configuration
public class MyCorsFilter {@Beanpublic CorsFilter corsFilter() {// 1.创建Cors配置对象CorsConfiguration config = new CorsConfiguration();// 支持域config.addAllowedOriginPattern("*");// 是否发送Cookieconfig.setAllowCredentials(true);// 支持请求方式config.addAllowedMethod("*");// 2.添加地址映射UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();corsConfigurationSource.registerCorsConfiguration("/**", config);// 3.返回CorsFilter对象return new CorsFilter(corsConfigurationSource);}
}
5、JSONP

只支持get请求,它会默认在请求中加上一个?callback=xxx的参数,它的值是随机的,这个值会作为秘钥的形式传给后端,你可以在ajax中通过jsonp:'a'、jsonpCallback:'cc'来设置它的名字和值

前端jQuery发送ajax请求

$.ajax({url: 'http://localhost:8081/cors/jsonp/1',dataType: 'jsonp',type: 'GET',success: function (result) {console.log(result);}
})

后端代码

@GetMapping("/jsonp/{id}")
public JSONPObject getUser(@PathVariable Long id, String callback) {User user = new User();return new JSONPObject(callback, new Result<>(200, "SUCCESS",user));
}


http://www.ppmy.cn/server/142934.html

相关文章

Spring Boot框架助力电商系统设计

2 相关技术 2.1 SpringBoot框架介绍 Spring Boot是一种不需要代码生成的一种框架&#xff0c;并且可以不需要配置任何的XML文件就可以&#xff0c;因为Spring Boot里面自带了很多接口&#xff0c;只需要配置不同的接口就会自动的应用并且识别需要的依赖&#xff0c;在配置方面非…

LeetCode77. 组合 Java题解

https://leetcode.cn/problems/combinations/ 剪枝&#xff1a;一共需要k个&#xff0c;目前已经有tmp.size个&#xff0c;还需要k-tmp.size个&#xff0c;i最大只能从n-(k-size)1开始。 class Solution {public List<List<Integer>> combine(int n, int k) {Arra…

25-Elasticsearch 数据建模实例

字段类型&#xff1a;Text v.s Keyword ● Text ⽤于全⽂本字段&#xff0c;⽂本会被 Analyzer 分词默认不⽀持聚合分析及排序。需要设置 fielddata 为 true ● Keyword ⽤于 id&#xff0c;枚举及不需要分词的⽂本。例如电话号码&#xff0c;email地址&#xff0c;⼿机号码…

七、利用CSS和多媒体美化页面的习题

题目一&#xff1a; 利用CSS技术&#xff0c;结合表格和列表&#xff0c;制作并美化 “ 翡翠阁 ”页面。运行效果如下 运行效果&#xff1a; 代码 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>翡翠阁</title>&…

IDEA怎么定位java类所用maven依赖版本及引用位置

在实际开发中&#xff0c;我们可能会遇到需要搞清楚代码所用依赖版本号及引用位置的场景&#xff0c;便于排查问题&#xff0c;怎么通过IDEA实现呢&#xff1f; 可以在IDEA中打开项目&#xff0c;右键点击maven的pom.xml文件&#xff0c;或者在maven窗口下选中项目&#xff0c;…

C#从入门到放弃

C#和.NET的区别 C# C#是一个编程语言 .NET .NET是一个在window下创建程序的框架 .NET框架不仅局限于C#,它还可以支持很多语言 .NET包括了2个组件&#xff0c;一个叫CLR(通用语言运行时)&#xff0c;另一个是用来构建程序的类库 CLR 用C写一个程序&#xff0c;在一台8688的机器…

Web前端开发基础知识--主体内容

1、锚点位置 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>锚点链接</title></head><body><p><a href"yingyong">计算机应用技术</a> <a href"#ruanjian&quo…

期权懂|交易股票期权该怎么操作?又该如何开户?

期权小懂每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 交易股票期权该怎么操作&#xff1f;又该如何开户&#xff1f; 一、交易股票期权主要包括以下几个步骤&#xff1a; &#xff08;1&#xff09;选择交易平台‌&#xff1a; 选择…