跨域请求被阻止:同源策略不允许读取远程资源,CORS 标头中缺少令牌“缓存控制”

Posted

技术标签:

【中文标题】跨域请求被阻止:同源策略不允许读取远程资源,CORS 标头中缺少令牌“缓存控制”【英文标题】:Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource, missing token ‘cache-control’ in CORS header 【发布时间】:2017-06-19 08:37:55 【问题描述】:

我有以下函数应该将 JSON 值传递给外部 API:

ack_receipt();

function ack_receipt() 
  var app_name = "Test Trial Account for infobip";
  $.ajax(
    url: "http://api.infobip.com/2fa/1/applications",
    async: true,
    crossDomain: true,
    headers: 
      "authorization": "Basic xxxxxxxxxxxxxxx",
      "cache-control": "no-cache"
    ,
    type: 'POST',
    dataType: 'JSON',
    data: 
      "name": app_name
    ,
    success: function(data, status) 
      console.log(status);
    ,
    error: function(x, status, error) 
      console.log(x, status, error);
      if (x.status == 403) 
        swal("Sorry, your session has expired. Please login again to continue");
       else if (x.status == 404) 
        swal("Sorry, something went wrong from our side");
       else 
        console.error("An error occurred: " + status + "nError: " + error);
      
    
  );

但是,当我尝试从浏览器运行该函数时,我收到以下警告,并且脚本在途中失败:

本网站使用 SHA-1 证书;建议您使用具有比 SHA-1 更强的哈希函数的签名算法的证书。

跨域请求被阻止:同源策略不允许读取位于https://api.infobip.com/2fa/1/applications 的远程资源。 (原因:CORS 预检通道的 CORS 标头“Access-Control-Allow-Headers”中缺少令牌“缓存控制”)。

请就如何处理帖子和Cache-control 提出建议。

【问题讨论】:

该错误表示服务器上的 CORS 标头未正确设置。您无法从 JS 代码中解决此问题。我建议您联系 API 开发人员并告诉他们问题所在。我也会担心 SHA-1 证书。如果您要使用该算法,甚至不值得证书的价格 【参考方案1】:

同源政策: 根据该政策,网络浏览器允许包含在第一个网页中的脚本访问第二个网页中的数据,但前提是两个网页具有相同的来源。 https://en.wikipedia.org/wiki/Same-origin_policy

实际上出于安全原因,现代浏览器不允许跨域访问。

这意味着网页和它尝试加载的 JSON 文件必须位于同一台服务器上。

我也遇到了同样的问题,我的解决方法是发送 通过我系统中的 API 请求(因为浏览器没有 允许跨域,但对节点甚至您来说都不是问题 可以发出 curl 请求)

我的一个朋友也建议创建一个代理服务器,但如果你注意到上面的步骤也像一个代理。

【讨论】:

以上是关于跨域请求被阻止:同源策略不允许读取远程资源,CORS 标头中缺少令牌“缓存控制”的主要内容,如果未能解决你的问题,请参考以下文章

跨域请求被阻止:同源策略不允许在 http://........ 读取远程资源

Ajax:跨域请求被阻止:同源策略不允许读取远程资源

跨域请求被阻止:同源策略不允许读取某个 URI 处的远程资源

跨域请求被阻止:同源策略不允许在 http://localhost3000 读取远程资源

跨域请求被阻止:同源策略不允许在 https://localhost:3000/ 读取远程资源 [重复]

Angular + Nodejs Express:错误跨域请求被阻止:同源策略不允许读取远程资源