CORS(跨域资源共享)
跨域问题主要是由于浏览器的同源策略(Same-Origin Policy)引起的。
同源策略要求,只有当网页和其请求的资源来自同一个源(即协议、域名和端口号都相同)时,浏览器才允许网页访问这些资源。如果网页试图访问一个不同源的资源,就会遇到跨域问题。
- 不同的协议:如果一个网站使用 HTTPS,而另一个网站使用 HTTP,它们被视为不同的源。
- 不同的域名:即使两个网站在同一协议下,如果它们的域名不同(如
example.com
和sub.example.com
),也会引起跨域。- 不同的端口:即使协议和域名相同,如果端口不同(如
example.com:80
和example.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>
标签加载数据,这种方式不受同源策略限制,但存在安全隐患。
标签:资源共享,请求,CORS,允许,com,example,跨域 From: https://www.cnblogs.com/21CHS/p/18528848代理服务器:通过在同一源的服务器上设置代理,将请求转发到目标服务器,从而绕过跨域限制。