CORS(跨域资源共享)

CORS(跨域资源共享)

跨域问题主要是由于浏览器的同源策略(Same-Origin Policy)引起的。

同源策略要求,只有当网页和其请求的资源来自同一个源(即协议、域名和端口号都相同)时,浏览器才允许网页访问这些资源。如果网页试图访问一个不同源的资源,就会遇到跨域问题。

  • 不同的协议:如果一个网站使用 HTTPS,而另一个网站使用 HTTP,它们被视为不同的源。
  • 不同的域名:即使两个网站在同一协议下,如果它们的域名不同(如 example.comsub.example.com),也会引起跨域。
  • 不同的端口:即使协议和域名相同,如果端口不同(如 example.com:80example.com:8080),也会被视为不同的源。
  • AJAX 请求:当使用 AJAX 请求从一个源(如 example.com)访问另一个源(如 api.example.com)时,浏览器会阻止这种请求,除非目标服务器允许跨域请求。
  • iframe 嵌套:如果一个页面通过 iframe 嵌套了来自不同源的页面,可能会引发跨域问题,尤其是在尝试访问嵌套页面的 DOM 时。

解决办法

CORS(跨域资源共享):服务器通过设置 Access-Control-Allow-Origin 等 HTTP 头来允许来自不同源的请求。

@RestController
@CrossOrigin //设置==>允许不同源的请求
@RequestMapping("/api/v1")
public class EmployeeController {
    //业务代码
}

配置全局CORS: 如果你想为所有的控制器,包括所有的请求提供CORS支持,可以通过实现WebMvcConfigurer接口来全局配置CORS。

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 WebConfig implements WebMvcConfigurer {  
    @Override  
    public void addCorsMappings(CorsRegistry registry) {  
        registry.addMapping("/**") // 允许所有请求路径  
                .allowedOrigins("http://your-allowed-origin.com") // 允许的域名  
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 允许的请求方法  
                .allowedHeaders("*") // 允许所有头部  
                .allowCredentials(true); // 是否允许携带凭证  
    }  
}  

JSONP:通过 <script> 标签加载数据,这种方式不受同源策略限制,但存在安全隐患。

代理服务器:通过在同一源的服务器上设置代理,将请求转发到目标服务器,从而绕过跨域限制。

posted @   CH_song  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示