一、同源策略
【前言】
在开始实际操作之前,先来聊聊什么是同源策略?许多人都对跨域有一定的误解,认为这是前端工程师的问题,和后端没说什么关系,其实并不是的,说到跨域,就不得不说一下浏览器的同源策略。
【简介】
同源策略是由美国Netscape(网景)公司提出的一个著名的安全策略,它是目前市面上的浏览器最核心也是最基本的安全功能,现在所有支持JavaScript的浏览器都会使用这个策略。所谓同源是指协议、域名、端口都要相同。同源策略是基于安全层面而提出来了,其实这个策略本身并没有什么问题,但是开发者在开发中由于各种原因会存在跨域的需求。例如:一个大型项目由多个公司来完成,不同公司开发的项目域名和端口一般不同,但是各个公司之间又有数据交互的需求,这时就会存在跨域的需求。
【历程】
传统的跨域解决方案是JSONP
,JSONP虽然能解决跨域,但是它有一个很大的弊端,就是它只支持GET
请求,不支持其他类型的请求,但是我们平时常用的还有POST
请求,那这种解决方案肯定不行。
而今天我们说的CORS
(跨域源资源共享)(CORS,Cross-origin resource sharing)是一个W3C标准,它是一份浏览器技术的规范,提供了Web服务从不同网域传来沙盒脚本的方法,以避开浏览器的同源策略,这是JSONP模式的现代版。
在Spring框架中,对于CORS
也提供了解决方案,今天来说说SpringBoot中如何实现CORS。
二、举例
【第一步】先创建两个SpringBoot项目,一个命名为cors1提供服务,另一个命名为cors2消费服务,第一个默认端口8080即可,第二配置端口为8081,然后在cors1上新建一个Controller,并提供一个get接口,如下:
【cors1 -> HelloController.java】
@RestController
public class HelloController {
@GetMapping("/get")
public String getData() {
return "hello get cors";
}
}
【cors2 -> application.properties】
server.port=8081
在cors2项目下的resources/static
目录创建一个index.html文件,发送一个简单的get请求,如下:
【cors2 -> index.html】
<!DOCTYPE html>
<html lang="en">
<head