什么是 CORS(跨源资源共享)?

CORS(Cross-Origin Resource Sharing,跨源资源共享)是一种安全机制,用于允许或限制一个网页从不同的源(域名、协议或端口)请求资源。它是浏览器的一种安全特性,旨在防止恶意网站通过脚本访问用户在其他网站上的数据。

主要概念

  1. 跨源请求:当一个网页尝试请求与其源不同的资源时,就会发生跨源请求。例如,https://example.com 请求 https://api.example.com 的数据。

  2. 同源策略:浏览器的同源策略阻止了不同源之间的请求。如果没有 CORS,跨源请求会被浏览器拒绝。

  3. CORS 头:CORS 通过 HTTP 头来允许跨源请求。服务器可以在响应中包含特定的 CORS 头,以指示哪些源可以访问资源。

重要的 CORS 头

  • Access-Control-Allow-Origin:指定允许访问资源的源,可以是具体的域名、通配符(*)或不允许任何源。

  • Access-Control-Allow-Methods:指定允许的 HTTP 方法(如 GETPOSTPUT 等)。

  • Access-Control-Allow-Headers:指定可以在请求中使用的自定义请求头。

  • Access-Control-Allow-Credentials:指示是否允许携带用户凭据(如 Cookie)。

  • Access-Control-Max-Age:指定预检请求(preflight request)的有效时间。

使用场景

  • API 调用:当前端应用需要访问不同域的 RESTful API 时,服务器需要启用 CORS。

  • 资源共享:在不同域之间共享字体、图像、样式表等资源。

预检请求

对于某些复杂的请求(如使用 PUTDELETE 方法),浏览器会先发送一个预检请求(OPTIONS),以确定实际请求是否安全。服务器必须正确响应该请求以允许实际请求继续执行。

总结

CORS 提供了一种灵活的方式来安全地共享资源,同时保护用户数据不被恶意网站访问。正确配置 CORS 是确保 Web 应用安全的关键步骤。

在 Spring Boot 项目中配置 CORS资源共享)可以通过以下几种方式实现: 1. **使用注解**: - 可以在控制器类或方法上使用 `@CrossOrigin` 注解。例如,允许所有来访问: ```java @CrossOrigin(origins = "*") @GetMapping("/example") public String example() { return "Hello, World!"; } ``` - 可以进一步配置请求方法和是否允许凭证等: ```java @CrossOrigin(origins = "http://example.com", allowedHeaders = "*", methods = {RequestMethod.GET, RequestMethod.POST}, allowCredentials = "true") @GetMapping("/example") public String example() { return "Hello, World!"; } ``` 2. **全局配置**: - 通过创建一个配置类并注册一个 `WebMvcConfigurer` bean 来全局配置 CORS: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class MyConfig { @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") // 允许所有路径 .allowedOrigins("*") // 允许所有来 .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 允许的请求方法 .allowedHeaders("*") // 允许的请求 .allowCredentials(true); // 是否允许发送 Cookie 信息 } }; } } ``` 3. **使用过滤器**: - 如果需要更复杂的 CORS 配置,可以使用过滤器来实现: ```java import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @Component public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Max-Age", "3600"); chain.doFilter(req, res); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值