我得到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);
}
型
2条答案
按热度按时间hjqgdpho1#
Content-Security-Policy
是一个responseheader:HTTP Content-Security-Policy响应标头允许网站管理员控制允许用户代理为给定页面加载的资源。
所以在 AJAX 请求中发送它是没有意义的。
gdrx4gfi2#
我也有同样的问题,但我搜索了
CORS
和Content-Security-Policy
或CSP
。我可以在这里分享我的一些搜索: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方法和头。抱歉,如果这是一个有点长,但我觉得有必要解释的主要概念。
希望能帮到你:)
最好的问候。