【问题标题】:Why is the CONTENT_DISPOSITION header considered unsafe?为什么 CONTENT_DISPOSITION 标头被认为是不安全的?
【发布时间】:2020-07-22 11:35:10
【问题描述】:

我开发了一个 REST 端点,它可以生成一个序列化为字节数组的 zip 文件。

@GetMapping(path = "/export-zip", produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<byte[]> exportZipFile() throws IOException {
        try {
            MyZipObject zip = zipService.createZip();
            HttpHeaders httpHeaders = new HttpHeaders();
            httpHeaders.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + zip.getFileName() + ".zip\"");
            return new ResponseEntity<>(zip.getData(), httpHeaders, HttpStatus.OK);
        } catch (Exception e) {
            return new ResponseEntity(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

使用 Postman,我可以成功地从这个 API 获取响应并将其保存到 Zip 文件中。然而,我们的前端用来调用这个 API 的 React 代码会产生错误

Refused to get unsafe header “Content-Disposition"

我不确定为什么一开始就认为标头不安全,但我也想知道如何将其呈现为安全标头。

【问题讨论】:

标签: java reactjs spring-boot rest http-headers


【解决方案1】:

这是一个有用的回复,谢谢。最后,我能够通过将以下代码添加到我的控制器来解决此问题

httpHeaders.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, HttpHeaders.CONTENT_DISPOSITION);
httpHeaders.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + fileName + ".zip\"");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2021-02-04
    • 2014-03-08
    • 2014-03-26
    • 2011-08-13
    • 2012-11-19
    • 2020-01-03
    相关资源
    最近更新 更多