为了账号安全,请及时绑定邮箱和手机立即绑定

浏览器跨域访问

标签:
Java

跨域访问

下面都是对浏览器跨域进行的配置,对小程序和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>

===================================================================

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消