当前位置: 首页 > 知识库问答 >
问题:

如何克服ReactJS中的CORS问题

魏康安
2023-03-14

我正在尝试通过我的React应用程序中的Axios进行API调用。但是,我在浏览器上遇到了这个CORS问题。我想知道我是否可以从客户端解决这个问题,因为我在内部没有任何对API的访问权限。附件是我的代码。

const response = axios({
  method: "post",
  dataType: "jsonp",
  url: "https://awww.api.com",
  data: {
    appToken: "",
    request: {
      applicationName: "ddfdf",
      userName: "jaime@dfd.com",
      password: "dfd",
      seasonIds: [1521ddfdfd5da02],
    },
  },
});

return {
  type: SHARE_REVIEW,
  payload: "response",
};

附件是我的WebPack.config.js

module.exports = {
  entry: ["./src/index.js"],
  output: {
    path: __dirname,
    publicPath: "/",
    filename: "bundle.js",
  },
  module: {
    loaders: [
      {
        exclude: /node_modules/,
        loader: "babel",
        query: {
          presets: ["react", "es2015", "stage-1"],
        },
      },
      { test: /\.json$/, loader: "json-loader" },
    ],
  },
  resolve: {
    extensions: ["", ".js", ".jsx"],
  },
  devServer: {
    historyApiFallback: true,
    contentBase: "./",
  },
  node: {
    dns: "mock",
    net: "mock",
  },
};

共有3个答案

阚通
2023-03-14

通过名为CORS的chrome插件临时解决此问题。顺便说一句,后端服务器必须向前端请求发送正确的标头。

钱瑞
2023-03-14

理想的方法是向服务器添加CORS支持。

您也可以尝试使用单独的jsonp模块。据我所知axios不支持jsonp。所以我不确定您使用的方法是否符合有效的jsonp请求的条件。

CORS问题还有另一个黑客工作。您必须使用nginx服务器部署代码,作为服务器和客户端的代理。将使我们陷入困境的事情proxy_pass指令。配置您的nginx服务器,以便处理您的特定请求的位置块将proxy_pass或将您的请求重定向到您的实际服务器。CORS 问题通常是由于网站域中的更改而发生的。当您有一个单独的代理作为客户端和服务器的面孔时,浏览器就会被愚弄,认为服务器和客户端位于同一域中。因此,没有CORS。

考虑这个例子。

您的服务器是< code>my-server.com,您的客户端是< code>my-client.com,请按如下方式配置nginx:

// nginx.conf

upstream server {
    server my-server.com;
}

upstream client {
    server my-client.com;
}

server {
    listen 80;

    server_name my-website.com;
    access_log /path/to/access/log/access.log;
    error_log /path/to/error/log/error.log;

    location / {
        proxy_pass http://client;
    }

    location ~ /server/(?<section>.*) {
        rewrite ^/server/(.*)$ /$1 break;
        proxy_pass http://server;
    }
}

这里my-website.com将是代码可访问的网站的结果名称(代理网站的名称)。一旦nginx以这种方式配置。您需要修改请求,以便:

    < li >所有API调用都从< code>my-server.com/

如果你不熟悉nginx,我建议你浏览一下文档。

为了简单解释上述配置中发生的情况:

  • 上游定义了请求将重定向到的实际服务器。
  • 服务器块用于定义nginx服务器的实际行为
  • 如果有多个服务器块,server_name用于标识将用于处理当前请求的块
  • error_logaccess_log指令用于定义日志文件的位置(用于调试)
  • 位置块定义了不同类型请求的处理:
    1. 第一个位置块处理以<code>/</code>开头的所有请求。所有这些请求都被重定向到客户端。</li>
    2. 第二个位置块处理从<code>/server开始的所有请求/

注意:此处的/server用于区分客户端请求和服务器端请求。由于域是相同的,因此没有其他区分请求的方法。请记住,没有这样的约定迫使您在所有此类用例中添加/server。它可以更改为任何其他字符串,例如。/my-server/

尽管这种技术应该可以做到这一点,但我强烈建议您向服务器添加CORS支持,因为这是处理此类情况的理想方式。

如果你想避免在开发时做这些事情,你可以使用这个chrome扩展。它应该允许您在开发过程中执行跨域请求。

郏瀚
2023-03-14

我从“TraversyMedia”教程中发现的最简单的方法是在“axios”或“get ch”api中使用https://cors-anywhere.herokuapp.com

https://cors-anywhere.herokuapp.com/{type_your_url_here} 

例如。

axios.get(`https://cors-anywhere.herokuapp.com/https://www.api.com/`)

在您的情况下,将url编辑为

url: 'https://cors-anywhere.herokuapp.com/https://www.api.com',
 类似资料:
  • 问题内容: 我正在尝试通过React应用程序中的Axios进行API调用,但是我在浏览器中遇到了CORS问题。我想知道我是否可以从客户端解决此问题,因为我内部没有对API的任何访问权。附加的是我的代码。 附件是我的WebPack.config.js 问题答案: 理想的方法是向服务器添加CORS支持。 您也可以尝试使用单独的jsonp模块。据我所知axios不支持jsonp。因此,我不确定您使用的方

  • 问题内容: 我正在尝试通过React应用程序中的Redux动作和reducers进行api调用。 但是,我的浏览器出现了这个CORS问题。 我想知道我是否可以从客户端解决此问题,因为我内部没有对API的任何访问权限。 谁能帮我解决这个问题? 这是newsActions.js的代码: 这是server.js的代码: 如果您需要其他信息或有疑问,请在下面对其进行评论。 谢谢。 问题答案: 您可以通过将

  • 问题内容: 我实现了一个ajax轮询脚本,该脚本每10秒在服务器Controller中调用一次操作。通过响应,我替换了的内容: 这是通过 https 完成的。经过一段时间的“空闲”,IE会显示以下消息: 该页面正在访问不受其控制的信息。这带来了安全风险。你想继续吗? 如果用户单击“ 是” ,则页面将重定向到仅显示响应的页面。如果用户单击“ 否” ,则什么都不会发生,但是不会刷新容器。 我知道我可以

  • 当我的应用程序安装到Android L preview时,它会失败,出现错误: install_failed_no_matching_abis。 我的应用程序只使用arm库,使用库的功能在x86上被禁用。它在Android L之前工作得很完美,但现在我连它都装不上了。如何为我的应用程序禁用此错误?

  • 刚刚开始使用scala和spark来运行这个简单的程序:

  • 我正在使用reactjs构建一个前端唯一的基本天气应用程序。对于API请求,我使用Fetch API。在我的应用程序中,我从一个简单的API获取当前位置,它以JSON对象的形式给出了位置。但是当我通过获取API请求它时,我得到了这个错误。 所以我搜索并找到了多种解决方案来解决这个问题。 在Chrome启用CORS解决了这个错误,但是当我在heroku上部署应用程序时,我如何通过移动设备访问它,而不