跨域访问

下面都是对浏览器跨域进行的配置,对小程序和app的跨域不会生效

============================================================== 浏览器的同源策略:阻止从一个域加载的脚本去获取另一个域上的资源 只要 协议 域名 端口 有任何的不同,都被当作是不同的域 浏览器console看到Access-Control-Allow-Origin就代表跨域了

spring mvc 跨域访问

第一种 controller跨域注解

@RestController
@RequestMapping(value = "goodsSales")
// 增加运行跨域注解 
// {}里的域名是允许哪些域名跨域访问
// 协议 域名 端口号都需要写 80端口不需要写
// 这种只能单个控制器使用 需要全局跨域需要令行配置
@CrossOrigin(origins = {"https://localhost:8080"})   
public class GoodsSalesController {
// origins 可以配置 * 表示所有 端口,域名,协议都可以请求,但是不安全不建议配
// maxAge 预检请求缓存 3600 秒
// 非简单请求put/delete 等会发送两次请求,一次预检请求一次时间请求 
// maxAge是把第一次预检结果缓存起来,接下来的3600秒内就不需要再次预检直接发送实际请求,减轻压力
@CrossOrigin(origins = {"*"}, maxAge = 3600)
public class GoodsSalesController {

配置完注解就可以跨域访问,本质上是在请求和响应中都有了说明

在请求的Request Header里加上了“Sec-Fetch-Mode: cors” 代表这是一个跨域访问

Response Header里的Vary这一行表示远程url允许跨域访问,浏览器就会把返回的结果解析,显示 如果没有配置跨域注解,那就没Vary这一行,浏览器就认为,该远程资源不允许被远程访问,即便在接口响应里得到了结果,浏览器也不会解析

第二种 spring mvc全局跨域配置(cors全局配置)

<beans>
    <mvc:cors>
<!--        path="/request/**" 表示远程域名访问到request为前缀的url上都会被这个策略进行管理-->
<!--        allowed-origins 允许哪些域名访问-->
<!--        max-age 预检请求缓存时间-->
        <mvc:mapping path="/request/**"  allowed-origins="http://localhost:8080, http://localhost:8080" max-age="3600"/>
    </mvc:cors>
</beans>
作者:|hiliyipeng6339708|,原文链接: http://www.imooc.com/article/325668

文章推荐

Java并发(十一) - -线程五种状态与六种状态

redis持久化之RDB

Xxl-job安装部署以及SpringBoot集成Xxl-job使用

Typecho<=1.2.0 存储型XSS 复现

扎实打牢数据结构算法根基,从此不怕算法面试系列之006 week...

深度剖析Redis九种数据结构实现原理,建议收藏

Oracle JDK 和 OpenJDK 有什么区别?

Rancher(V2.6.3)安装K8s教程

【JavaScript快速排序算法】不同版本原理分析

关于 Web 应用的内联 css 和 scss 文件里的 var 关键字用法

Springboot2.x整合ElasticSearch7.x实战(一

Java开发学习(一)----初识Spring及其核心概念