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

如何修复获取API中的CORS问题

麹鸿煊
2023-03-14

我正在使用reactjs构建一个前端唯一的基本天气应用程序。对于API请求,我使用Fetch API。在我的应用程序中,我从一个简单的API获取当前位置,它以JSON对象的形式给出了位置。但是当我通过获取API请求它时,我得到了这个错误。

Failed to load http://ip-api.com/json: Request header field Access-Control-Allow-Origin is not allowed by Access-Control-Allow-Headers in preflight response.

所以我搜索并找到了多种解决方案来解决这个问题。

  1. 在Chrome启用CORS解决了这个错误,但是当我在heroku上部署应用程序时,我如何通过移动设备访问它,而不会遇到相同的CORS问题。
  2. 我找到了一个代理API,它支持CORS请求。但是由于这是一个定位请求,这给了我代理服务器的位置。所以这不是解决办法。
  3. 我已经通过了这个Stackoverflow问题,并在我的超文本传输协议请求中向标题添加了标题,但它并没有解决问题。(它仍然给出了相同的错误)。

那么,我怎样才能永久性地解决这个问题呢?在FetchAPI中解决http请求的CORS问题的最佳解决方案是什么?

共有3个答案

庞阳波
2023-03-14

您应该使用代理解决方案,但将客户端的IP而不是代理传递给它。以下是您使用维基媒体的IP指定的API的示例URL格式:

http://ip-api.com/json/208.80.152.201

晁开宇
2023-03-14

该API似乎是允许的,响应为访问控制允许源代码:

我还没有弄清楚是什么导致了你的问题,但我不认为这仅仅是获取应用编程接口。

这对我来说在Firefox和Chrome上都很好。。。

fetch('http://ip-api.com/json')
   .then( response => response.json() )
   .then( data => console.log(data) )
伊锦
2023-03-14

如果您正在进行发布、发布或补丁请求,则必须使用JSON. stringify(data)正文对数据进行Stringify。

fetch(URL, 
        {
            method: "POST", 
            body: JSON.stringify(data),
            mode: 'cors',
            headers: {
                'Content-Type': 'application/json',
            }
        }
    ).then(response => response.json())
    .then(data => {
        ....
    })
    .catch((err) => {
        ....
        })
    });
 类似资料:
  • 下面是API调用的代码 所以当我检查应用程序时,我会... 我如何解决CORS问题,以便能够从API获取所需的详细信息到应用程序?

  • 我在获取API时遇到了一些问题。当我启动这段代码时: 从 http://quenouillere.fr/,它可以毫无问题地工作。但是当我想从 https://quenouillere.fr/ 使用它时,它不适用于CORS问题。它检测到源不一样(因为是http谁发起请求,https谁接收它)我在互联网上搜索,但似乎没有人有这个问题。 https上的CORS问题 谢谢你提前的回答:)

  • 一切正常,但我想隐藏单词以使命令更简短。 如果我在编写命令时没有单词 显示以下内容: Docker:尝试连接到unix上得Docker后台程序套接字时获得得权限被拒绝:///var/run/Docker.sock:Post http://%2fvar%2frun%2fdocker.sock/v1.35/containers/create:拨号unix/var/run/Docker.sock:con

  • 我只是从我当地的回购协议中克隆了一个Android项目,我很难“构建”它。也许它错过了一些外部图书馆,但我不知道。 在开始等级构建时,我得到以下信息: 我试着检查“清单”文件,但我找不到。我完全迷路了... 我很确定这是一个配置错误,因此我可以在这里找到所有的配置文件: settings.gradle代码 (来自项目文件夹内)的输出如下:

  • 我创建了一个 xsd,并将其与 jaxb 插件(如波纹管)一起使用: 插件: 它给我生成了这样的类: 我使用这个Camel路径来取消xml的共享: 但是当我运行我的应用程序时,我得到了下面的错误... [路线2][未封印1][未封印org.apache.camel.model.dataformat.JaxbDataFormat@7aff8796][ 0] 堆栈跟踪-----------------