Access to XMLHttpRequest at ‘httpxxxx‘ from origin ‘httpxxxx‘ has been blocked by CORS policy

在前后端分离项目中遇到CORS跨域错误,导致请求失败。错误信息显示缺少'Access-Control-Allow-Origin'头。分析表明是浏览器的同源策略限制。解决方案包括在SpringBoot和Spring Security项目中配置CORS,以及在Vue-cli前端通过vue.config.js和main.js设置。同源策略是保证网络请求安全的策略,不遵循可能导致信息安全风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解决CORS跨域问题

  • 今天做前后端分离的项目时, 前端向后台发送请求发现报错: Access to XMLHttpRequest at ‘http://localhost:8082/doLogin’ from origin ‘http://localhost:8080’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
  • 问题分析: 从报错信息可以知道是由于CORS(Cross-origin resource sharing)所致
  • 解决方案
    1. SpringBoot项目解决方案

      /**
       * 解决异步访问跨域
       */
      @Configuration
      public class CorsConfig implements WebMvcConfigurer {
          @Override
          public void addCorsMappings(CorsRegistry registry) {
              //本应用的所有方法都会去处理跨域请求
              registry.addMapping("/**")
                      //允许远端访问的域名
                      .allowedOrigins("http://localhost:8080")
                      //允许请求的方法("POST", "GET", "PUT", "OPTIONS", "DELETE")
                      .allowedMethods("*")
                      //允许请求头
                      .allowedHeaders("*");
          }
      }
      
    2. Sp

### 解决通过 Ajax 请求发送 ID 到 Flask 后端时遇到的 CORS 策略问题 当尝试通过 Ajax 将数据发送至 Flask 后端时,如果浏览器返回 CORS (Cross-Origin Resource Sharing) 错误,则表明客户端与服务器之间的域名、协议或端口不一致,从而触发了同源策略的安全限制。以下是具体解决方案。 --- #### 什么是 CORSCORS 是一种安全机制,旨在防止网页恶意脚本访问不同来源(domain)下的资源。默认情况下,浏览器不允许跨域请求除非服务端显式允许[^4]。 --- #### 配置 Flask 支持 CORS 要使 Flask 应用支持跨域请求,推荐使用第三方扩展 `flask-cors`。安装该库并通过简单配置即可轻松解决问题。 ##### 安装依赖 ```bash pip install flask-cors ``` ##### 初始化并启用 CORS ```python from flask import Flask, request, jsonify from flask_cors import CORS from models import db, User # 假设已定义模型类 app = Flask(__name__) CORS(app) # 全局开启 CORS 支持 @app.route("/delete/<int:id>", methods=['DELETE']) def delete_user_by_id(id): try: user = User.query.get(id) if not user: return jsonify({"status": 1, "message": "未找到对应用户"}), 404 db.session.delete(user) db.session.commit() return jsonify({"status": 0, "message": "删除成功"}) except Exception as e: db.session.rollback() return jsonify({"status": 1, "message": str(e)}), 500 ``` 在此示例中,`CORS(app)` 行全局启用了跨域支持,适用于所有路由和方法[^5]。 --- #### 更精细的 CORS 控制 有时可能仅希望某些特定路由支持跨域访问而非全部开放。此时可按需调整配置: ```python from flask_cors import cross_origin @app.route("/delete/<int:id>", methods=['DELETE']) @cross_origin() # 单独为某个视图添加 CORS 支持 def delete_user_by_id(id): ... ``` 还可以进一步定制行为,例如限定允许的来源地址、HTTP 方法等选项: ```python CORS( app, resources={r"/api/*": {"origins": "http://example.com"}}, supports_credentials=True # 如果需要携带 Cookie 或认证信息 ) ``` 上述代码片段设置了 `/api/` 开头的接口只接受来自 `http://example.com` 的请求,并且启用了带凭证的支持[^6]。 --- #### 浏览器调试技巧 即使后端正确配置了 CORS,仍可能出现错误提示。这种情形通常源于预检请求(Preflight Request)。对于 DELETE 类型的操作,默认会先发起 OPTIONS 请求询问服务器是否许可实际操作。因此建议验证响应头部是否包含以下字段: - **Access-Control-Allow-Methods**: 明确列出被准许的方法名,比如 `"GET", "POST", "PUT", "DELETE"`。 - **Access-Control-Allow-Headers**: 若自定义了额外 Header 参数也需声明于此处。 - **Access-Control-Max-Age**: 缓存时间长度,减少重复 Preflight 查询次数。 --- #### 总结 解决 Flask 中的 CORS 问题是开发过程中常见的挑战之一。借助于专门设计的工具包如 `flask-cors` 可极大简化工作量。同时理解其背后原理有助于快速定位潜在隐患所在位置。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值