MALOUDA-PSA 2024-02-27 21:21 采纳率: 91%
浏览 2
已结题

关于客户端申请跨域的问题

报错如下:
Access to XMLHttpRequest at 'http://131.43.15.14:8800/' from origin 'http://127.0.0.1:8080' has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.

下面代码是不是没有做跨域?


     var jsonString = JSON.stringify(jsonObject);
 93         // 创建 XMLHttpRequest 对象
 94         //var xhr = new XMLHttpRequest();
 95         //var url = "your_backend_url_here"; // 替换成你的后端接口地址
 96         // 设置 POST 请求
 97     //  xhr.open("POST", url, true);
 98         xhr.setRequestHeader("Content-Type", "application/json");
 99         // 发送请求
100         xhr.send(jsonString);


  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-27 21:22
    关注

    引自免费微信小程序:皆我百晓生

    您遇到的错误是由于跨域资源共享(CORS)策略导致的。在现代浏览器中,出于安全考虑,对不同源发起的HTTP请求有所限制,特别是当使用 XMLHttpRequest 或 Fetch API 进行 AJAX 请求时。

    从错误信息来看:

    Access to XMLHttpRequest at 'http://131.43.15.14:8800/' from origin 'http://127.0.0.1:8080' has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.
    

    这意味着您的客户端应用(运行在 http://127.0.0.1:8080)尝试通过 XMLHttpRequest 向 http://131.43.15.14:8800/ 发起 POST 请求,并设置了 "Content-Type" 为 "application/json" 的请求头。然而,服务器端在预检请求(OPTIONS 方法)返回的响应头中没有包含 "Access-Control-Allow-Headers",或者其中不包含 "content-type",所以浏览器阻止了这次跨域请求。

    解决方案:

    为了让服务器允许来自不同源的请求,并允许发送 "Content-Type" 请求头,你需要在服务器端进行配置。以下是一个基本示例,以 Express.js 框架为例,在服务器端添加 CORS 配置:

    const express = require('express');
    const cors = require('cors'); // 引入 cors 中间件
    
    const app = express();
    
    // 允许指定来源或所有来源的跨域请求,并允许自定义请求头
    app.use(cors({
      origin: ['http://127.0.0.1:8080'], // 可以是数组,表示允许多个源;'*' 表示允许任何源
      methods: ['GET', 'POST', 'PUT', 'DELETE'],
      allowedHeaders: ['Content-Type', 'Authorization'], // 允许的请求头
      credentials: true, // 是否允许携带cookie等凭证信息
    }));
    
    // ... 其他路由和中间件配置 ...
    
    app.listen(8800, () => {
      console.log('Server listening on port 8800');
    });
    

    如果你不能直接修改服务器端代码,请联系服务提供商或后端开发人员,要求他们在服务器端增加相应的 CORS 设置,以便允许你的客户端应用程序进行跨域请求并发送 "Content-Type" 请求头。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月6日
  • 已采纳回答 2月27日
  • 创建了问题 2月27日

悬赏问题

  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题
  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”