@RequestMapping(produce = "application/json;charset=utf-8" ) 会阻止 jsonp 请求吗?



我正在尝试在生产服务器上调试一个问题,其中控制器内部有一个方法,由以下人员注释:

@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 中,我收到跨源读取阻止 (CORB( 阻止跨源响应的警告......使用 MIME 类型应用程序/json。

我以为 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");

将 jsonp 更改为 json,因为您的服务器返回的是内容类型 JSON,而不是 jsonp。

我想

通了。

@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");

强制实施内容类型

最新更新