1 篇文章 最后更新:2025年6月6日
同源策略与跨域请求

一 同源策略与跨域请求

首先,跨域不是问题。是一种安全机制

1. 同源策略介绍

跨域是浏览器加载了与当前域名、协议、端口不同另一站点下的资源,这与各大支持JavaScript的浏览器的同源策略是违背的。

所谓 同源策略 ,它是由Netscape提出的一个著名的安全策略。是防止外网的脚本恶意攻击服务器的一种措施。

现在所有支持JavaScript 的浏览器都会使用这个策略。

所谓同源是指,域名,协议,端口相同。

2. 跨域请求的问题

– 前后端分离的开发环境下

跨域并不会阻止请求的发出,也不会阻止请求的接受,跨域是浏览器为了保护当前页面,你的请求得到了响应,浏览器不会把响应的数据交给页面上的回调,取而代之的是去提示你这是一个跨域数据。提示就是一个报错提醒

知道了浏览器是如何处理的了,才能对症下药来解决这个问题,下面介绍几种常用的跨域解决方法

二 解决跨域请求的问题

1. 跨域资源共享CORS

这是最靠谱也是非常科学的解决方案,通过Access-Control-Allow-Origin响应头,告诉浏览器如果请求我的资源的页面我这个响应头里记录了的"源",则不要拦截此响应,允许数据通行。

header头字段 含义 取值
Access-Control-Allow-Credentials 响应头表示是否可以将对请求的响应暴露给页面。返回true则可以,其他值均不可以。 true/false
Access-Control-Allow-Headers 表示此次请求中可以使用那些header字段 符合请求头规范的字符串
Access-Control-Allow-Methods 表示此次请求中可以使用那些请求方法 GET/POST(多个使用逗号隔开)

2. 跨域请求与Cookie


3. 前端解决方案JSONP

当服务端没有返回Access-Control-Allow-Origin这样的字段时,是否就意味着不能使用此资源了吗?不!只能说不建议使用此资源了。但我们还有另一种办法,那就是通过JSONP。

三 SpringBoot跨域配置

java解决CORS跨域请求的方式,主要有以下几种方式可供选择:

  1. 返回新的CorsFilter
  2. 重写 WebMvcConfigurer
  3. 使用注解 @CrossOrigin
  4. 自定义web filter 实现跨域 (手动设置响应头 :HttpServletResponse)

1. CorsFilter★★★

返回新的CorsFilter(全局跨域)

阅读更多 »