我正在尝试调试生产服务器上的问题,该服务器上有一个方法,其注释方式为:
@RequestMapping(value = "/endpoint", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
然后在javascript中对此端点进行ajax调用:
$.ajax({
type: "GET",
async: true,
url: "<%=endpointUrl%>",
dataType: "jsonp",
success: function(data){
console.log("success!");
},
error: function(xhr, options, error){
console.log("fail!");
}
});
但是在chrome浏览器中,我收到MIME类型为application / json的跨域读取阻止(CORB)阻止跨源响应的警告。
我认为jsonp用于“绕过”获取请求的同源策略吗?为什么会被阻止?
编辑:其他信息,这些标头在端点中设置:
httpResponse.setHeader("Content-Security-Policy", "default-src 'self' 'unsafe-inline' 'unsafe-eval'");
httpResponse.setHeader("X-Content-Type-Options", "nosniff");
httpResponse.setHeader("X-XSS-Protection", "1");
答案 0 :(得分:0)
当您的服务器返回内容类型JSON而不是jsonp时,将jsonp更改为json。
答案 1 :(得分:0)
我知道了。
@RequestMapping(value = "/endpoint", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
更改为
@RequestMapping(value = "/endpoint", method = RequestMethod.GET, produces = "text/javascript;charset=utf-8")
问题是由
引起的httpResponse.setHeader("X-Content-Type-Options", "nosniff");
强制内容类型