请求的资源上不存在“Access-Control-Allow-Origin” - SEMrush API

Posted

技术标签:

【中文标题】请求的资源上不存在“Access-Control-Allow-Origin” - SEMrush API【英文标题】:No 'Access-Control-Allow-Origin' is present on requested resource - SEMrush API 【发布时间】:2019-07-22 16:36:51 【问题描述】:

我正在尝试使用 SEMrush API,我在 jQuery 中发出这样的请求:

$(document).ready(function() 
    $.get(
        'https://api.semrush.com',
        
            type: 'phrase_this',
            key: 'XXXXXXXXX',
            phrase: 'lol',
            database: 'uk'
        ,
        function(data) 
            console.log(data);
        
    );
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

这就是结果:

从源“https://example.com”访问“https://api.semrush.com/?type=phrase_this&key=XXXXXXX&phrase=lol&database=uk”处的 XMLHttpRequest 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。

查看堆栈溢出,我发现很多人对此 API 有不同的疑问,这让我相信有某种不同的方式来发送此请求以避免被 CORS 策略阻止,或者我是愚蠢而忽略了一些东西。

我已尝试查阅文档,但没有找到任何帮助。

【问题讨论】:

你应该通过服务器端来做请求,而不是客户端。 【参考方案1】:

您不能这样做的原因是您需要将您的密钥保密 - 否则任何人都可以创建一个新项目并开始在他们的网站上使用您的密钥,您会得到为此收费。您不应该将您的密钥暴露给前端。

https://www.semrush.com/blog/beginners-guide-to-semrush-project-api/

一旦您找到您的 API 密钥,您将希望对您帐户的其他未经授权的用户保密。此密钥对您来说是唯一的,确保您为使用您的密钥进行的任何调用支付必要的 API 单元。

您需要做的是向您的服务器 发出请求,并让您的服务器向 semrush 发出另一个请求,这样它们的密钥就不会暴露。基本上只是不要从前端发出请求,应该没问题。

【讨论】:

以上是关于请求的资源上不存在“Access-Control-Allow-Origin” - SEMrush API的主要内容,如果未能解决你的问题,请参考以下文章

django中的“请求的资源上不存在'Access-Control-Allow-Origin'标头”

如何解决请求的资源上不存在“Access-Control-Allow-Origin”标头

Http.post 请求的资源上不存在“Access-Control-Allow-Origin”标头

请求的资源发布请求上不存在“Access-Control-Allow-Origin”标头

Angular 2请求的资源上不存在“Access-Control-Allow-Origin”标头[重复]

API 请求错误 - 请求的资源上不存在“Access-Control-Allow-Origin”标头