Access to XMLHttpRequest at 'https://jdfwglhd.imtcme.edu.cn/emm/baseData/authInfoList' from origin 'https://jdfwgl.imtcme.edu.cn' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
时间: 2025-06-03 18:28:36 浏览: 23
### 解决CORS策略阻止跨域请求的问题
当浏览器尝试通过`XMLHttpRequest`发起跨域请求时,如果目标服务器未返回有效的`Access-Control-Allow-Origin`响应头,则会触发CORS错误。具体到当前场景中,“https://jdfwgl.imtcme.edu.cn”向“https://jdfwglhd.imtcme.edu.cn/emm/baseData/authInfoList”发送请求时,由于缺少必要的CORS头部配置,导致浏览器拒绝执行该请求[^1]。
#### CORS的工作原理
为了保护用户的隐私和数据安全,现代浏览器实施了同源策略(Same-Origin Policy),即只有在同一协议、同一主机名以及同一端口号的情况下才允许资源共享。然而,在实际应用开发过程中,不可避免地需要进行跨域通信。为此,引入了跨域资源共享(Cross-Origin Resource Sharing, CORS)机制来实现受控的安全跨域访问[^2]。
#### 配置服务器支持CORS的方法
要解决上述提到的“No 'Access-Control-Allow-Origin' header is present”的问题,可以通过调整后端服务端设置适当HTTP响应头的方式完成:
##### 方法一:简单请求处理
对于简单的GET或POST方法且不涉及自定义Header的情况,只需确保服务器返回如下字段即可满足基本需求:
```http
Access-Control-Allow-Origin: *
// 或者指定特定域名以提高安全性
Access-Control-Allow-Origin: https://jdfwgl.imtcme.edu.cn
```
此操作表明哪些来源可以合法地获取资源。注意星号(*)表示任何站点都可以访问这些资源,但在生产环境中推荐明确列出可信网站地址列表而不是通配符[^1]。
##### 方法二:预检请求(Preflight Request)的支持
如果前端发出的是复杂类型的请求(比如PUT DELETE等动词或者携带额外Headers),那么在此之前还会先做一个OPTIONS探测性质的动作询问对方是否接受即将发生的正式调用行为。此时除了常规项之外还需要增加几个参数声明可接收的内容类型及认证方式等等信息:
```http
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Max-Age: 86400 // 缓存时间长度秒数
```
以上述代码片段为例说明如何应对更复杂的状况下所需做的准备措施[^3]。
#### 实际案例分析与解决方案
假设我们正在构建一个基于Java Spring Boot框架的应用程序作为后台接口提供方,并希望它能够兼容来自不同客户端环境下的各种形式的数据交换活动。可以在全局过滤器级别统一添加对应的逻辑控制部分从而简化维护成本同时也增强了灵活性。
```java
import org.springframework.stereotype.Component;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
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;
HttpServletRequest request= (HttpServletRequest)req;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type,X-Requested-With");
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
chain.doFilter(req, res);
}
}
}
```
上面展示了一个典型的Spring组件类CorsFilter实现了javax.servlet.Filter接口的功能扩展点设计模式理念应用于项目当中去自动拦截所有的传入流量并对符合条件的对象附加相应的属性标签标记以便于后续环节识别利用[^5]。
阅读全文
相关推荐


















