JSF Download over HTTPS не работает, хотя под HTTP работает нормально - PullRequest
0 голосов
/ 04 мая 2020

Я имею дело со странной ошибкой, которая воспроизводима только в производственной среде через соединение https. Во-первых, я пытаюсь загрузить файл * .cvs, мой код поддержки выглядит следующим образом:

    ExternalContext externalContext = facesContext.getExternalContext();
    try (OutputStream outputStream = externalContext.getResponseOutputStream()) {
        String exportFileName = exportHandler.getExportFileName();
        String contentType = externalContext.getMimeType(exportFileName);

        externalContext.responseReset();
        externalContext.setResponseCharacterEncoding(CHARSET);
        externalContext.setResponseContentType(contentType);
        externalContext.setResponseHeader("Content-disposition", "attachment; filename=\"" + exportFileName + "\"");

        int length = exportHandler.writeCsvTo(outputStream); // with a BufferedWriter the lines are written and the bytes are summed up.

        externalContext.setResponseContentLength(length);
        outputStream.flush();
    }

    facesContext.responseComplete();

Все отлично работает через соединение http или на localhost (даже https на localhost работает), но в работе через соединение https разные веб-браузеры выдают разные сообщения об ошибках. Chrome выдает следующее сообщение: «Возможно, веб-страница в ... временно отключена или она постоянно перемещена на новый веб-адрес. ERR_HTTP2_PROTOCOL_ERROR» В загрузке Firefox начинает загружаться, а затем ничего не происходит, поскольку это происходит вечно. В разделе IE: «Соединение с веб-сайтом было сброшено. Код ошибки: INET_E_DOWNLOAD_FAILURE»

Я бы сказал, что это связано с длиной содержимого ответа, поскольку я не уверен, что он мне все еще нужен после написания выходного потока. Заголовок ответа выглядит следующим образом:

  • Соединение: keep-alive
  • Расположение содержимого: вложение; filename = "test.csv"
  • Content-Type: text / csv; charset = ISO-8859-15
  • Дата: понедельник, 04 мая 2020 г. 10:16:41 GMT
  • Кодирование передачи: chunked

Не знаю, почему заканчивается насколько я знаю, это мой ответ с помощью фрагментированной кодировки передачи, которая может происходить только в том случае, если длина контента не установлена. Любое тело имеет какие-либо идеи, я пропускаю некоторые ограничения заголовка в моем ответе, такие как установка контроля кэша?

...