我知道这在SO上已经解决了很多次,但所有的答案大多是“向服务器添加某个标头”。在这种情况下,API(Shopify)工作得非常好,可以通过curl轻松访问。
我在Axios库和Fetch API中都尝试过这一点。
referer
、mode
和referrerPolicy
的每个值我不明白为什么这在cURL中可以完全正常工作,但在fetch()中却不行。
以下是我的代码的简化版本:
const apiKey = 'mykey';
const apiPassword = 'mypass';
const apibase = 'https://my-shop-domain.myshopify.com/admin/';
const endpoint = 'locations.json';
var headers = new Headers({
"Authorization": "Basic " + btoa( apiKey + ':' + apiPassword ),
});
fetch( apibase + endpoint {
method: 'GET',
headers: headers,
mode: 'no-cors',
// cache: "no-store",
// referrer: "client",
// referrerPolicy: "origin",
// credentials: 'include'
}).then( resp => resp.json().then( resp => {
console.log( resp );
})).catch( err => {
console.error(err);
});
返回的错误是
CORS 策略已阻止从源“https://localhost:8080”在“https://my-shop-domain.myshopify.com/admin/locations.json”提取的访问:对预检请求的响应未通过访问控制检查:请求的资源上不存在“访问控制-允许-源”标头。如果不透明响应满足你的需求,请将请求的模式设置为“no-cors”,以便在禁用 CORS 的情况下获取资源。
如果Shopify不包含Access-Control-Allow-Origin标头,为什么html" target="_blank">请求可以很好地使用cURL?有节点库和Ruby库可以访问Shopify API,所以很难相信它们根本不允许从javascript访问。
所以我想我的问题是,我能做些什么来用javascript访问这个API?
为什么?解释:
CORS策略在浏览器中实现,以允许网站之间共享资源,同时防止网站相互攻击:
这些策略仅适用于浏览器内部。据推测,cURL之所以有效,是因为它在浏览器脚本的上下文之外发出直接的HTTP请求。这导致了如何解决 CORS 限制...
解决方案:
3种修复CORS错误的方法-以及Access Control Allow Origin标头如何工作解释了如何绕过CORS限制。它们都通过操纵请求头/源来工作:
实际上,选项#3是唯一真正的解决方案。SvelteKitendpoint使代理请求变得超级简单。
您必须使用FormData而不是JSON。
var data = new FormData();
data.append('key', 'value');
fetch('api', {
method: 'POST',
body: data,
})
.then(response => response.json())
.then(data => {
console.log(data);
});
null 我不明白为什么这在cURL中可以非常好地工作,而在fetch()中却不行。 以下是我的代码的缩短版本: 返回的错误是 如果Shopify不包含Access-Control-Allow-Origin头,为什么Curl的请求可以正常工作?有节点库和Ruby库可以访问Shopify API,所以很难相信它们根本不允许从javascript访问。 所以我想我的问题是我可以做什么来从JavaScr
我对CSHTML中的javascript有一个问题。当我使用DropDownListField时,它就像一种魅力。 脚本部分: 我想将DropDownListField更改为RadioButtonList,但当我这样做时,我的脚本根本不起作用。有人能帮我吗? 多谢
我有一个使用Github OAuth插件的詹金斯服务器,并在github的“授权应用程序”部分授权,它在我的浏览器上运行良好,只要我通过github认证,我就可以访问詹金斯服务器。 有没有办法使用来自CURL或ruby客户端的oauth凭据/令牌访问jenkins服务器api? 我在中生成了一个令牌https://github.com/settings/applications - 这个令牌可以很
我试图直接访问Kubernetes API,而不运行。但是当我使用serviceaccount默认值的令牌时,我得到一个403。即使在为此serviceaccount创建了ClusterRole和ClusterRoleBinding之后,请求也会被拒绝403。 我应用的配置如下所示: (它几乎是来自kubernetes io上的文档,只是使用了ServiceAccount作为主题,并将资源更改为p
我在使用cURL和Postman测试Django restapi时遇到问题。我正在使用LoginRequiredMixin限制对我的类视图的访问: 当未经授权的用户试图访问该页面时,他将被重定向到登录页面。在URL中是一个?下一个参数,以便用户在授权后立即查看所需页面。 问题是cURL和Postman可能甚至不使用提供的用户名和密码进行身份验证,并立即被重定向到登录页面,结果返回。 下面是一个示例
我使用两次作为启动参数启动了java应用程序(Java8版本),而不是使用一次和一次。我马上改变了它,但我在研究它会有什么影响。 它会默认设置吗?它是否没有最大的堆内存,对垃圾回收器有影响,运行的频率降低,甚至不运行?