jquery 从 AJAX 获取API调用中的CORS问题

csga3l58  于 2023-08-04  发布在  jQuery
关注(0)|答案(2)|浏览(203)

我得到CORS的问题,而从 AJAX 调用API与头Content-Security-Policy":"frame-ancestors 'none'
我的API是在Java Sping Boot 中构建的。API服务器已配置Access-Control-Allow-Origin : *。如果我删除Content-Security-Policy":"frame-ancestors 'none',API工作得非常好。
下面是请求:

$.ajax({url: "https://****.com/api/v2/login",
    type: 'post',
    data: JSON.stringify(domain),
    headers: {
      "x-dreamfactory-api-key":'*******',
      "x-frame-options":'deny',
      "Content-Security-Policy":"frame-ancestors 'none'",
      "pragma":'no-cache',
      "sec-fetch-mode":'cors',
      "Referer":'https://****.com',
      "origin":'https://****.com',
      "sec-fetch-site":'same-site',
      "sec-fetch-dest":'empty',
      "Content-Type":'application/json'
    },
    dataType: 'json',
    success: function (data) {
        console.log(JSON.stringify(data));
    }
  });

字符串
我使用WebMVCConfigurationSupport的API配置如下:

@Override

public void addCorsMappings(CorsRegistry registry) {

registry.addMapping("/v2/**").allowedMethods("PATCH","GET", "POST", "OPTIONS","PUT", "DELETE").allowedOrigins("*")
.allowedHeaders("*").allowCredentials(true);
}

hjqgdpho

hjqgdpho1#

Content-Security-Policy是一个responseheader:
HTTP Content-Security-Policy响应标头允许网站管理员控制允许用户代理为给定页面加载的资源。
所以在 AJAX 请求中发送它是没有意义的。

gdrx4gfi

gdrx4gfi2#

我也有同样的问题,但我搜索了CORSContent-Security-PolicyCSP。我可以在这里分享我的一些搜索:CORS(跨域资源共享)和CSP(内容安全策略)是两种控制资源访问的独立机制。
CORS是一种机制,它允许从资源来源域之外的另一个域请求网页上的许多资源(例如字体、JavaScript等)。
Content-Security-Policy响应头主要用于防止跨站点脚本(XSS),clickjacking和其他代码注入攻击,这些攻击是由于在可信网页上下文中执行恶意内容而导致的。这里的问题不是与CORS有关,而是与内容安全策略(CSP)有关。您正在设置frame-ancestors none,这意味着该页面不能被任何页面框住,包括来自同一来源的页面。这可能会导致您的问题。内容安全策略(CSP)中的frame-ancestors指令指示客户端在页面是嵌套浏览上下文(如<frame><iframe><object><embed><applet>)的目标时如何处理呈现。当您在请求中包含"Content-Security-Policy": "frame-ancestors 'none'"时,您告诉服务器不应该将响应嵌入到<iframe><object><embed>等中。
如错误所示,由于内容安全策略,该设置阻止加载响应。如果您希望请求成功,则需要相应地调整CSP设置,或者在您的用例不需要时将其删除。
请记住,客户端设置不能决定服务器如何响应。CSP应该在服务器的响应上设置,而不是在客户端的请求上设置。如果服务器需要发送CSP,它将在响应中发送,而不是在请求中侦听。
一般来说,服务器负责在对客户端的响应中包含Content-Security-Policy头。在客户端请求中包含此标头通常没有效果,并且可能导致混淆,如本例所示。
最后,考虑在服务器端管理CSP,并确保您的CORS设置允许来自您期望的源的请求。请记住确保允许必要的HTTP方法和头。
抱歉,如果这是一个有点长,但我觉得有必要解释的主要概念。
希望能帮到你:)
最好的问候。

相关问题