服务端 CORS 解决跨域
当协议、域名、端口中任一个不同时产生跨域
CORS 跨域资源共享(Cross-origin resource sharing)
参考资料https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
CORS的两种请求方式
简单请求
满足以下条件
- 请求方法是以下三种方法之一:
- HEAD
- GET
- POST
- HTTP的头信息不超出以下几种字段
- Accept
- Accept-Language
- Content-Language
- Last-Event-ID
- Content-Type:只限于三个值(application/x-www-form-urlencoded、multipart/form-data、text/plain)
流程
浏览器在header中增加一个Origin字段,该字段说明本次请求来自哪个源。服务器根据这个值决定是否同意这次请求。如果不允许,返回一个正常的HTTP响应,浏览器根据返回的响应的头信息中是否包含Access-Control-Allow-Origin字段判断是否成功
非简单请求
不满足简单请求的条件
流程
浏览器发送一个方法为OPTIONS的预检请求,服务器根据请求头中的Access-Control-Allow-*等字段判断是否允许跨域请求。若服务器拒绝的跨域请求,会返回一个正常的HTTP响应,但是没有任何CORS相关的信息字段。浏览器会认定服务器不同意预检请求,触发跨域错误。
可以通过服务端设置Access-Control-Max-Age字段来避免频繁发送预检请求,单位:秒
服务端处理机制
- 首先查看HTTP头部有无Origin字段
- 如果没有,或者不允许,当成普通请求
- 如果有且是允许的,再看是否是
preflight(method=OPTIONS) - 如果不是preflight(简单请求),返回
Allow-Origin,Allow-Credential等字段,并返回正常内容 - 如果是preflight(非简单请求),返回
Allow-Headers,Allow-Methods等
服务端的CORS解决跨域问题
在Controller上加注解 @CrossOrigin
可配置项
@AliasFor("origins")
String[] value() default {};
@AliasFor("value")
String[] origins() default {};
String[] allowedHeaders() default {};
String[] exposedHeaders() default {};
RequestMethod[] methods() default {};
String allowCredentials() default "";
long maxAge() default -1L;
统一配置
@Configuration
public class WebMvcConfig {
@Bean
public CorsFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.addAllowedOrigin("*");//允许任何域名
config.setAllowCredentials(true);//允许Cookie
config.addAllowedMethod("*");//允许任何方法
config.addAllowedHeader("*");//允许任何头
config.setMaxAge(1800l);//设置预检请求保持时间,避免频繁发送预检请求
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
configSource.registerCorsConfiguration("/**", config);
return new CorsFilter(configSource);
}
}
其他解决方案
vue cli3
项目根目录下新建vue.config.js文件
proxy: {
"/api": {
target: "http://localhost:8080/KeyWord/",// 要访问的接口域名
}
}
在请求前加上/api/即可,详细参考Vue CLI3官方文档https://cli.vuejs.org/zh/config/#devserver-proxy
Nginx配置(没实践过,自行百度)
服务端 CORS 解决跨域的更多相关文章
- 14 微服务电商【黑马乐优商城】:day06-使用nginx反向代理并掌握cors解决跨域
本项目的笔记和资料的Download,请点击这一句话自行获取. day01-springboot(理论篇) :day01-springboot(实践篇) day02-springcloud(理论篇一) ...
- Spring Boot中通过CORS解决跨域问题
今天和小伙伴们来聊一聊通过CORS解决跨域问题. 同源策略 很多人对跨域有一种误解,以为这是前端的事,和后端没关系,其实不是这样的,说到跨域,就不得不说说浏览器的同源策略. 同源策略是由Netscap ...
- Spring Boot2 系列教程(十四)CORS 解决跨域问题
今天和小伙伴们来聊一聊通过CORS解决跨域问题. 同源策略 很多人对跨域有一种误解,以为这是前端的事,和后端没关系,其实不是这样的,说到跨域,就不得不说说浏览器的同源策略. 同源策略是由 Netsca ...
- 一步一步学习SignalR进行实时通信_3_通过CORS解决跨域
原文:一步一步学习SignalR进行实时通信_3_通过CORS解决跨域 一步一步学习SignalR进行实时通信\_3_通过CORS解决跨域 SignalR 一步一步学习SignalR进行实时通信_3_ ...
- 配置CORS解决跨域调用—反思思考问题的方式
导读:最近都在用一套完整的Java EE的体系做系统,之前都是用spring框架,现在弄这个Java EE,觉得新鲜又刺激.但,由于之前没有过多的研究和使用,在应用的过程中,也出现了不少的问题.累积了 ...
- Django使用jsonp和cors解决跨域请求问题
1.使用jsonp的方式解决跨域请求的问题 我启动两个django项目,然后使用的端口不一样,在项目1中通过ajax发请求给项目2,然后接受项目2发送过来的数据 先看项目1的ajax的代码 $(&qu ...
- 使用cors解决跨域遇到浏览器发出options嗅探
前言: 本地开发起的服务器,通过修改hosts文件设置域名映射到本地,接口在测试环境 1. 服务器端设置cors, 配置access-control-allow-origin 头部 使用蚂蚁金服的up ...
- JSONP、CORS解决跨域问题
一.为什么会有跨域问题? 是因为浏览器的同源策略是对ajax请求进行阻拦了,但是不是所有的请求都给做跨域,对href属性都不拦截. 二.解决跨域问题的两种方式 JSONP CORS 三.JSONP 先 ...
- 后端CORS解决跨域问题
一 . 为什么会有跨域问题 是因为浏览器的同源策略是对ajax请求进行阻拦了,但是不是所有的请求都给做跨域,像是一般的href 属性,a标签什么的都不拦截. 二 . 解决跨域的方法 解决跨域有两种方法 ...
随机推荐
- JS如何做2048(详细)
在做2048之前,我们首先要了解它的游戏规则,以及运行逻辑 首先,来看上半部分 除了标题外还有记录每次获得的分数,以及总分数,还有一个重新开始按钮,这个最大分数会保存下来. 来看页面内容 页面内容由1 ...
- ABAP-JCO服务端连接问题
公司网络服务加域,若SAP服务器后端未配置端口号映射,则外部服务器注册JCO服务监听需要调整 # server jco.server.connection_count=5 jco.server.gwh ...
- VMware网络配置三种网络模式(桥接、NAT、Host-only)
VMware网络配置三种网络模式(桥接.NAT.Host-only) 一.虚拟安装后三种网络模式显示 当安装好后,的“虚拟网络编辑器”中也存在三种模式,分别对应:桥接-VMnet0.Host-only ...
- 记录一下JProfiler的使用
刚入职实习,第四天了,昨晚老大安排我在公司机器上装个JProfiler看一情况. 然后网上都是什么跟tomcat一起使用的,所以折腾了很久才搞出来. 我这里没用什么服务器,因为公司用的是Play!框架 ...
- java--动态代理设计模式,CGLIB实现的动态代理设计模式
代理设计模式 代理设计模式的基本形式 代理设计模式的核心思路,一个接口两个子类,一个子类完成核心业务操作,另一个完成与核心业务有关的辅助性操作.例如,编写一个简单的设计模式. package com. ...
- yum nginx最新版安装
去官方站点获取yum仓库 [root@web01 ~]# cat /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http:// ...
- VirtualBox、VMware在桥接模式下无法获取ip地址问题
声明: 参考 https://blog.csdn.net/lcdcxy/article/details/49362171 https://jingyan.baidu.com/article/948f5 ...
- css完结篇
1.如何让一个绝对定位的盒子居中 left:50%; margin-left:-宽度的一半; 2.固定定位 position:fixed; 1.脱标 参考点:浏览器左上角 作用:固定导航栏,返回顶部, ...
- [转]BIO/NIO/AIO的几个思考
原文:https://www.jianshu.com/p/ff29e028af07 ----------------------------------------------------- BIO/ ...
- UTF-8&Unicode,0xC0和0x80是什么?
转载:http://blog.sina.com.cn/s/blog_7c4f3b160101dv4p.html 一个字符串长度统计的代码,如下 int calcLen(const char* _str ...