什么是跨域访问
当一个资源从与该资源本身所在的服务器不同的域或端口请求一个资源时 ,资源会发起一个跨 域 HTTP请求。比如,站点 http://example-a.com 的某 HTML 页面通过 <img> 的 src 请求 ht甲://example-b.com/ 1mage.jpg。 网络上的许多页面都会加载来 自不同域的 css 样式表 、 图像和脚本等资源 。
W3C 制定了 CORS 的相关规范,见 https://www.w3.org/TR/cors/。 出于安全考虑,浏览器会限 制从脚本内发起的跨域 HTTP请求。 例如, XMLHtψRequest 和 Fetch 遵循同源策略。 因此,使用 XMLH叩 Request 或 Fetch 的 Web 应用程序只能将 HTTP 请求发送到其自己的域 。 为了改进 Web 应 用程序,开发人员要求浏览器厂商允许跨域请求。
如何识别是跨域行为
识别是否具有跨域行为,是由同游、政策决定的。 同游、政策由 N巳tscape公司引入浏览器。 目前, 所有浏览器都实行这个政策 。 所谓“同源”,指的是“ 三个相同” 。
- 协议相同
- 域名相同
- 端口相同
举例来说, http://example.com/page.html这个网址,协议是 http:从域名是 www.example.com, 端口是 80 (默认端口可以省略) 。 它的同源情况如下 : - http://example.com/other.html:同源 。
- http://www.example.com/other.html:不同源,域名不同 。
- http://v2.example.com/other.html: 不同源,域名不同 。
- http://example.com:8 l/other.html:不同源,端口不同 。
在 Spring Boot 应用中允许踏域访问
在微服务的架构里面,由于每个服务都在其自身的源中运行,因此,很容易就会遇到来自多个 来源的客户端Web应用程序来访问服务的问题(即跨域访问) 。 例如,一个浏览器客户端从 “客户” 微服务器访问“客户”,并从“订单”微服务器访问订单历史记录, 这种做法在微服务领域非常 普遍。
SpringMVC 支持 CORS 的开箱即用的功能 。 主要有两种实现跨域访问的方式 。
-
方法级别的跨域访问
Spring Boot 提供了一种简单的声明式方法来实现跨域请求。 以下示例显示如何使用 @CrossOrigin 注解,来启用允许跨域访问某些接口 。
example
其中, origins ="刺 意味着允许所有域名访问(当然,你也可以限定某个域名来访问 ) 。 maxAge = 3600是指有效期为 3600秒。
-
全局跨域访问
可以通过使用自定义的 addCorsMappings(CorsRegistry)方法注册 WebMvcConfigurer bean 来定 义全局CORS配置。 用法如下:
屏幕快照 2018-10-18 下午2.54.39.png
网友评论