详解Spring MVC CORS 跨域
作者:小新是也 发布时间:2023-11-25 08:04:37
介绍
跨域CORS,全称是"跨域资源共享"(Cross-origin resource sharing)
当页面发出跨域请求时:
1、简单请求(先简单理解为正常的get/post吧):
浏览器将请求的地址添加到header的Origin里面发送请求。接下来就看后台如何处理了。
2、非简单请求(姑且简单理解成Content-Type:"application/json"吧):
浏览器会先发个预检请求(preflight),也就是OPTIONS请求。服务器返回是否许可访问和支持的请求方式,浏览器再决定是否发出请求。
使用@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字段的值。methods: 允许的请求方法,像get,post这些
allowCredentials: 对应Access-Control-Allow-Credentials 该字段可选。它的值是一个布尔值,表示是否允许发送Cookie。默认情况下,Cookie不包括在CORS请求之中。设为true,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器。这个值也只能设为true,如果服务器不要浏览器发送Cookie,删除该字段即可。
maxAge: 对应Access-Control-Max-Age 用来指定预检请求的有效期(秒),在有效期内不在发送预检请求直接请求。默认1800秒,即30分钟。
使用spring配置文件
这个适合用于全局的配置,对应的字段跟CrossOrigin差不多。path表示允许跨域的路径。
<mvc:cors>
<mvc:mapping path="/**" allowed-methods="*"/>
</mvc:cors>
来源:http://www.cnblogs.com/chenchuxin/p/6602928.html
猜你喜欢
- Spring boot项目结合docker容器用,打了个jar包,启动的时候竟然说:no main manifest attribute,
- MyBatis 通过包含的jdbcType类型BIT FLOAT CHAR &nbs
- 面试题1:谈一下你对 Nginx 的理解Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAP
- 话不多说,请看代码:package com.lxj.demo;import java.io.BufferedReader;import ja
- 因为在Action的execute方法声明时就抛出了Exception异常,所以我们无需再execute方法中捕捉异常,仅需在struts.
- 配置不生效的解决办法注意:如果配置不生效,则说明spring优先加载了其他配置:解决办法:添加启动参数 -Dlogging.config=c
- 排查@CacheEvict注解失效我简单看了一下《Spring实战》中的demo,然后就应用到业务代码中了,本以为如此简单的事情,竟然在代码
- 一、判断语句最常用的顺序结构只能顺序执行,并不能进行判断和选择。于是便有了下面两种分支结构if语句switch语句1. if语句一个if语句
- /** * 实现 * @author dujinyang * */顺序是: OneAcitivity
- Handler每个初学Android开发的都绕不开Handler这个“坎”,为什么说是个坎呢,首先这是Android架构的精髓之一,其次大部
- 环境:VS2019+Qt5.121. CLR库安装 &nb
- 格式要求:SU MO TU WE TH FR SA &nb
- 一、简介Android的消息机制主要是指Handler的运行机制,那么什么是Handler的运行机制那?通俗的来讲就是,使用Handler将
- 本文实例讲述了java生成XML的方法。分享给大家供大家参考,具体如下:下拉框的生成,我是通过javascript读取xml文件生成的。Xm
- 概述:App几乎都离不开与服务器的交互,本文主要讲解了flutter网络请求三种方式 flutter自带的HttpClient、 第三方库h
- 一、前言环境:jdk 1.8,SpringCloud Greenwich.SR2。如题,springcloud config-client启
- 如下所示:package cn.sunzn.md5;import java.security.MessageDigest;import ja
- 本文实例为大家分享了Android绝对布局AbsoluteLayout的具体代码,供大家参考,具体内容如下1>AbsoluteLayo
- 项目结构:运行效果:========================================================下面是代
- 一、Socket是什么Socket 的中文翻译过来就是“套接字”。套接字是什么,我们先来看看它的英文含义:插座。Socket 就像一个电话插