Access to XMLHttpRequest at 'http://localhost:9091/User/findByPage/1' from origin 'http://localhost:65128' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
时间: 2023-07-24 08:50:25 浏览: 249
这是一个跨域请求的问题,当前你所在的前端页面在 localhost:65128,尝试去请求 localhost:9091 的接口,但是浏览器的跨域策略阻止了这个请求。解决方法可以在后端接口的响应头中添加 Access-Control-Allow-Origin: *,表示允许任何来源的跨域请求。或者你可以使用 JSONP 或者代理等其他跨域解决方案。
相关问题
Access to XMLHttpRequest at 'http://localhost:8082/api/user/login' from origin 'http://localhost:9527' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource
这个错误提示是因为浏览器的同源策略(Same Origin Policy)限制了跨域请求。简单来说,浏览器不允许从一个源(域名、协议、端口)发送请求到另一个源。如果需要进行跨域请求,可以在服务端设置响应头部中的“Access-Control-Allow-Origin”字段,来允许特定的源进行访问。具体实现可以参考CORS(Cross-Origin Resource Sharing)协议。
Access to XMLHttpRequest at 'http://localhost:8081/api/user/current' from origin 'http://localhost:5173' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
### 解决方案
为了使 `http://localhost:5173` 能够成功访问 `http://localhost:8081/api/user/current` 的接口并解决 CORS 问题,可以在服务器端配置响应头以允许特定的源发起请求。
以下是基于 Java Spring Boot 或 Spring Cloud Gateway 配置 CORS 的方法:
#### 方法一:Spring Boot 中全局配置 CORS
如果使用的是 Spring Boot,则可以通过在项目的 `application.yml` 文件中添加以下配置来启用全局 CORS 支持[^2]:
```yaml
spring:
mvc:
cors:
enabled: true # 启用CORS支持
cors:
allowed-origins: "http://localhost:5173" # 允许的前端地址
allowed-methods: GET, POST, PUT, DELETE, OPTIONS # 允许的方法
allowed-headers: "*" # 允许的头部信息
allow-credentials: true # 是否允许发送Cookie
```
此配置会自动为所有控制器添加 CORS 头部信息。对于更细粒度的控制,可以针对单个 API 进行设置。
---
#### 方法二:Spring Boot 中局部配置 CORS
如果仅希望对某些特定 URL 添加 CORS 支持,可以通过创建一个自定义过滤器类实现[^2]:
```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 WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/user/current") // 指定API路径
.allowedOrigins("http://localhost:5173") // 允许的前端地址
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 允许的方法
.allowedHeaders("*") // 允许的头部信息
.allowCredentials(true); // 是否允许发送Cookie
}
}
```
这种方法适用于需要单独管理不同路由 CORS 设置的情况。
---
#### 方法三:手动返回 HTTP 响应头
如果不希望通过框架内置功能完成 CORS 配置,也可以直接在 Controller 层或 Filter 层显式地向客户端返回所需的响应头[^1]:
```java
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/api")
public class UserController {
@GetMapping("/user/current")
public String getCurrentUser(HttpServletResponse response) throws IOException {
response.setHeader("Access-Control-Allow-Origin", "http://localhost:5173"); // 设置允许的Origin
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
response.setHeader("Access-Control-Allow-Headers", "*");
response.setHeader("Access-Control-Allow-Credentials", "true");
return "{\"username\": \"admin\"}"; // 返回JSON数据
}
}
```
这种方式适合于快速测试或者不依赖框架的情况下解决问题。
---
#### 方法四:Nginx 反向代理配置
如果服务部署在外网环境并通过 Nginx 提供反向代理支持,还可以通过调整 Nginx 配置文件的方式统一处理跨域问题[^3]:
```nginx
server {
listen 80;
server_name localhost;
location /api/ {
proxy_pass http://localhost:8081/;
add_header Access-Control-Allow-Origin "http://localhost:5173";
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
add_header Access-Control-Allow-Headers "*";
add_header Access-Control-Allow-Credentials "true";
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin "http://localhost:5173";
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
add_header Access-Control-Allow-Headers "*";
add_header Access-Control-Max-Age 1728000; # 缓存预检请求的时间长度
return 204; # 对于OPTIONS请求直接返回状态码204
}
}
}
```
这种做法特别适合生产环境中对外暴露的服务。
---
### 总结
以上四种方式均可有效解决从 `http://localhost:5173` 访问 `http://localhost:8081/api/user/current` 所遇到的 CORS 问题。推荐优先考虑 **方法一** 和 **方法二**,因为它们更加贴近现代开发实践,并能充分利用框架的功能简化开发流程。
---
阅读全文
相关推荐

















