AWS ALB не декодирует двоичный ответ

У меня за балансировщиком нагрузки стоит лямбда. Я пытаюсь вернуть zip-файл (двоичное содержимое) из лямбда-выражения. Поскольку тип ответа - приложение / поток октетов, ответ кодируется кодом base 64, а флаг isbase64encoded устанавливается как истина.

Ожидание состоит в том, что когда этот флаг включен, ALB декодирует ответ перед его отправкой в ​​браузер, но этого не происходит.

Отметим, что я использую бессерверную библиотеку Java-контейнера AWS (https://github.com/awslabs/aws-serverless-java-container/tree/master/aws-serverless-java-container-springboot2) для запуска веб-сервиса в лямбда-выражении. за ALB

Для журналов Lambda, запросов, заголовков ответов и кода см. Ниже.

Лямбда-журнал: - [2021-05-27 / 13:43:51.805 / UTC][ИНФОРМАЦИЯ][основной][caspiLambdaContainerHandler]; 127.0.0.1 null- null [27.05.2021: 13: 43: 51Z] "GET / downloadZip null" 200 403 "-" "Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, например Gecko) Chrome / 90.0.4430.212 Safari / 537.36 "в сочетании [2021-05-27 / 13:43:51.805 / UTC][ИНФОРМАЦИЯ][основная][caspiLambdaContainerHandler]; 127.0.0.1 null- null [27.05.2021: 13: 43: 51Z] "GET / downloadZip null" 200 403 "-" "Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, например Gecko) Chrome / 90.0.4430.212 Safari / 537.36 "в сочетании

Заголовки ответа: - content-disposition: attachment;filename=download.zipcontent-length: 740content-type: application / octet-stream date: Thu, 27 May 2021 13:43:51 GMTserver: awselb / 2.0

Заголовки запроса (браузера): -: Authority: ddvs-ci-binary-lambda.ihsmval-dev.com: method: GET: path: /downloadZip: scheme: httpsaccept: text / html, application / xhtml+xml, application /xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8, application / signed-exchange;v=b3;q=0.9accept-encoding: gzip, deflate, braccept-language: en-US,en;q=0.9sec-ch-ua: "Not A;Brand";v="99", "Chromium";v="90", "Google Chrome";v="90" sec -ch-ua-mobile:? 0 sec-fetch-dest: documentsec-fetch-mode: перейти к sec-fetch-site: nonesec-fetch-user:?1upgrade-insecure-requests: 1user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 90.0.4430.212 Safari / 537.36

Код: - @GetMapping("/downloadZip")public void downloadFile(ответ HttpServletResponse) {

          response.setContentType("application/octet-stream");
    response.setHeader("Content-Disposition", "attachment;filename=download.zip");
    response.setStatus(HttpServletResponse.SC_OK);

    try (ZipOutputStream zippedOut = new ZipOutputStream(response.getOutputStream())) {
            Resource resource = new ClassPathResource("logback.xml");
            //FileSystemResource resource = new FileSystemResource(file);

            ZipEntry e = new ZipEntry(resource.getFilename());
            // Configure the zip entry, the properties of the file
            e.setSize(resource.contentLength());
            e.setTime(System.currentTimeMillis());
            // etc.
            zippedOut.putNextEntry(e);
            // And the content of the resource:
            StreamUtils.copy(resource.getInputStream(), zippedOut);
            zippedOut.closeEntry();

        zippedOut.finish();
    } catch (Exception e) {
        // Exception handling goes here
    }
}

Это бит, который кодирует ответ для типов двоичного ответа.

если (! this.isBinary (containerResponse.getContentType()) && this.isValidUtf8 (containerResponse.getAwsResponseBodyBytes ())) {responseString = containerResponse.getAwsResponseBodyString (); } еще { responseString = Base64.getEncoder (). encodeToString (containerResponse.getAwsResponseBodyBytes ());awsProxyResponse.setBase64Encoded(истина);}

0 ответов