【问题标题】:Does @RequestMapping(produces = "application/json;charset=utf-8") block jsonp requests?@RequestMapping(produces = "application/json;charset=utf-8") 会阻止 jsonp 请求吗?
【发布时间】:2019-05-29 08:33:06
【问题描述】:

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

@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 类型为 application/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");

【问题讨论】:

    标签: java spring spring-mvc servlets


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我想通了..

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

      强制内容类型

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-31
        • 2020-03-20
        • 1970-01-01
        • 2013-05-09
        • 1970-01-01
        • 2020-08-09
        • 2018-07-24
        相关资源
        最近更新 更多