Spring MVC CORS 跨域
介绍
跨域
CORS,全称是"跨域资源共享"(Cross-origin resource sharing)
当页面发出跨域请求时:
- 简单请求(先简单理解为正常的get/post吧):
浏览器将请求的地址添加到header的Origin里面发送请求。接下来就看后台如何处理了。 - 非简单请求(姑且简单理解成
Content-Type:"application/json"吧):
浏览器会先发个预检请求(preflight),也就是OPTIONS请求。服务器返回是否许可访问和支持的请求方式,浏览器再决定是否发出请求。
更多原理可以看阮一峰的 跨域资源共享 CORS 详解
使用@CrossOrigin注解
用法很简单,只需在controller或者方法上面添加注解即可。在controller上用表示整个controller下的方法都支持跨域
@Controller
public class HomeController {
@CrossOrigin
@RequestMapping("/")
public String Index() {
return "Index";
}
}
参数说明
origins: 表示允许跨域的地址
前面的http(s)必须加,默认*表示全部value:origins的别名allowedHeaders: 在OPTIONS请求中,返回的Access-Control-Allow-Headers
这个参数限定了客户端只能发送的header参数,不在此范围内浏览器阻止发出请求。默认*exposedHeaders: 对应Access-Control-Expose-Headers
该字段可选。CORS请求时,
XMLHttpRequest对象的getResponseHeader()方法只能拿到6个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必须在Access-Control-Expose-Headers里面指定。上面的例子指定,getResponseHeader('FooBar')可以返回FooBar字段的值。
(摘自: 跨域资源共享 CORS 详解)
methods: 允许的请求方法,像get,post这些allowCredentials: 对应Access-Control-Allow-Credentials
该字段可选。它的值是一个布尔值,表示是否允许发送
Cookie。默认情况下,Cookie不包括在CORS请求之中。设为true,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器。这个值也只能设为true,如果服务器不要浏览器发送Cookie,删除该字段即可。
(摘自: 跨域资源共享 CORS 详解)
maxAge: 对应Access-Control-Max-Age
用来指定预检请求的有效期(秒),在有效期内不在发送预检请求直接请求。默认1800秒,即30分钟。
使用spring配置文件
这个适合用于全局的配置,对应的字段跟CrossOrigin差不多。path表示允许跨域的路径。
<mvc:cors>
<mvc:mapping path="/**" allowed-methods="*"/>
</mvc:cors>
Spring MVC CORS 跨域的更多相关文章
- spring MVC cors跨域实现源码解析
# spring MVC cors跨域实现源码解析 > 名词解释:跨域资源共享(Cross-Origin Resource Sharing) 简单说就是只要协议.IP.http方法任意一个不同就 ...
- spring MVC cors跨域实现源码解析 CorsConfiguration UrlBasedCorsConfigurationSource
spring MVC cors跨域实现源码解析 spring MVC cors跨域实现源码解析 名词解释:跨域资源共享(Cross-Origin Resource Sharing) 简单说就是只要协议 ...
- 从零开始学 Java - Spring MVC 实现跨域资源 CORS 请求
论职业的重要性 问:为什么所有家长都希望自己的孩子成为公务员? 答:体面.有权.有钱又悠闲. 问:为什么所有家长都希望自己的孩子成为律师或医生? 答:体面.有钱.有技能. 问:为什么所有家长都不怎么知 ...
- Java - Spring MVC 实现跨域资源 CORS 请求
拦截器设置响应头 这种方式原理就是利用拦截器在方法执行前,我们增加请求的响应头,用来支持跨域请求.这种方案是可行的,大部分都是采用这种方案.我当时也是打算采用这种方案,直到我发现原来 Spring 框 ...
- Spring MVC 实现跨域资源 CORS 请求
说到 AJAX 跨域,很多人最先想到的是 JSONP.的确,JSONP 我们已经十分熟悉,也使用了多年,从本质上讲,JSONP 的原理是给页面注入一个 <script>,把远程 JavaS ...
- spring mvc的跨域解决方案
什么是跨域 一句话:同一个ip.同一个网络协议.同一个端口,三者都满足就是同一个域,否则就是跨域. 为什么非得跨域 基于两个方面: a. web应用本身是部署在不同的服务器上 b.基于开发的角度 -- ...
- Ajax+Spring MVC实现跨域请求(JSONP)(转)
背景: AJAX向后台(springmvc)发送请求,报错:已阻止交叉源请求:同源策略不允许读取 http://127.0.0.1:8080/DevInfoWeb/getJsonp 上的远程资源.可 ...
- spring mvc 解决跨域问题
Spring MVC 从4.2版本开始增加了对CORS的支持. 在Controller上使用@CrossOrigin注解: // 指定域名 @CrossOrigin("http://doma ...
- Ajax+Spring MVC实现跨域请求(JSONP)
背景: AJAX向后台(springmvc)发送请求,报错:已阻止交叉源请求:同源策略不允许读取 http://127.0.0.1:8080/DevInfoWeb/getJsonp 上的远程资源.可 ...
随机推荐
- 【Win 10 应用开发】MIDI 音乐合成——更改乐器音色
在开始今天的吹 BB 博文之前,说点题外话. 首先,上次老周给大伙伴们介绍完发送 MIDI 音符,本来说好的接着说一下如何更改乐器音色,为啥这么久都没更新呢.特特来解释一下,最近老周接了一个 ASP. ...
- Centos7下配置Python3和Python2共存,以及对应版本Ipython安装配置
1.查看是否已经安装Python Centos7默认安装了python2.7.5 因为一些命令要用它比如yum 它使用的是python2.7.5. 使用python -V命令查看一下是否安装Pytho ...
- WebGL多模型光照综合实例
原文地址:WebGL多模型光照综合实例 WebGL是一个非常的接近硬件底层的光栅化API, 从非常类似C/C++风格的API调用方式就可以看出来, 习惯了高级语言的我们会觉得很不友好,觉得特别 ...
- 安装配置Oracle 12c RAC
http://www.lab128.com/rac12_installation_using_vb/article_text.html
- Django-mtv开发模式
从著名的MVC模式开始说起 所谓的MVC就是把Web应用分为模型(M)控制器(C)和视图(V)三层,他们之间以一种插件式的.松耦合的房还是 连接在一起,模型负责业务对象与数据库的映射(ORM),视图负 ...
- Friday for Oldboy
计算机的硬件介绍 1. CPU的工作流程:取指令->解码->执行 . 程序状态字寄存器(Program Status Word,PSW)中有一个二进制位控制这两种模式. 内核态:当cp ...
- mongodb 聚合查询
操作符介绍: $project:包含.排除.重命名和显示字段 $match:查询,需要同find()一样的参数 $limit:限制结果数量 $skip:忽略结果的数量 $sort:按照给定的字段排序结 ...
- UVAlive 3708 Graveyard(最优化问题)
题目描述: 在周长10000的圆上,初始等距的放置着n个雕塑,现在新加入m个雕塑,要使得这n+m个雕塑仍然等距,问原来n个雕塑要移动的距离总和的最小值. 原题地址: http://acm.hust.e ...
- BZOJ 1293: [SCOI2009]生日礼物【单调队列】
1293: [SCOI2009]生日礼物 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2534 Solved: 1383[Submit][Stat ...
- 根据父节点parentid查询节点信息
---恢复内容开始--- SELECT * from tb3 where pid in(select id from tb1 where parentId ='ce2a98d7a04c4bf6a38 ...