服务端 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标签什么的都不拦截. 二 . 解决跨域的方法 解决跨域有两种方法 ...
随机推荐
- 在vue项目中使用live2d
成品如图: 那么几步简单说明怎么用吧: 第一,先去github上下载相应的静态资源: https://github.com/xiazeyu/live2d-widget-models 第二,将packg ...
- python 3.6 + robotFramework自动化框架 环境搭建、学习笔记
################################################################# #author: 陈月白 #_blogs: http://www.c ...
- Android笔记(十八) 下拉列表(Spinner)
App中常用的控件——下拉列表(Spinner),提供特定选择供用户选择 Spinner每次只能选择一个部件,它的选项来自于与之相关联的适配器(apater)中. MainActivity.java ...
- 【DRF框架】序列化组件
DRF框架的序列化组件 在前后端分离的应用模式中,后端仅返回前端所需的数据,返回的数据类似是JSON,因此需要使用序列化组件进行序列化再将数据返回 使用JsonResponse做序列化 # 使用Js ...
- NTFS文件系统概述
NTFS简介 NTFS是Windows NT家族1的限制级专用的文件系统2.Win95.Win98识别不了NTFS,只有支持NT内核的OS才能识别NTFS文件系统.当前,NTFS取代了老式的FAT文件 ...
- Windows10 临时将线程绑定至指定CPU的方法
本文首发:https://www.somata.work/2019/WindowsThreadBind.html 将线程绑定至指定CPU,这个应该时很多管理员需要了解认知的操作了吧,这样可以在一定程度 ...
- C++(三十四) — 友元函数、友元类
友元是可以访问类的私有成员和保护成员的外部函数.由 friend 修饰,不是本类的成员函数,但是在它的函数体中可以通过对象名访问本类的私有和保护成员. 友元关系不可传递,且是单向的. 友 ...
- 用js刷剑指offer(二叉树中和为某一值的路径)
题目描述 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...
- .NET Core EF 版本问题
最近在跟着官方的文档学习 .NET Core . 在写 “创建 Razor 页面 Web 应用” Demo 中的——“添加模型”这一篇的教程,“添加初始迁移”中遇到 “The EF Core tool ...
- python_面向对象——反射
1.反射 四个方法:getattr() 获取 class Person(): def __init__(self,name,age): self.name = name self.age = age ...