Chunked Transfer Encoding не работает, ответ полностью буферизован GFE - PullRequest
0 голосов
/ 07 марта 2020

Cloud Run / «Google Frontend», по-видимому, полностью буферизует ответы из приложения Cloud Run, даже если для ответа используется кодировка передачи по частям. Это плохо для инкрементального рендеринга.

У меня есть Java веб-приложение на основе com.sun. net .HttpServer, которое поддерживает чанкованное кодирование для ответа. Особенно очистка выходного потока создает чанк, поэтому я могу сделать:

  1. запись строки ответа
  2. грипп sh
  3. вычислить за 10 с
  4. напишите больше строк ответа

Локально, это приводит к получению фрагментированного ответа:

HTTP/1.1 200 OK
Date: Sat, 07 Mar 2020 17:08:10 GMT
Transfer-encoding: chunked
Content-type: text/plain;charset=utf-8

1c
<first output>

14
<next output>

17
<next output>

0

Используя curl, я вижу, что вывод появляется постепенно.

In напротив, при развертывании того же приложения в Cloud Run ответ полностью буферизуется и возвращается полностью, независимо от того, сколько времени длится пауза (много секунд), сколько чанков или сколько контента возвращается (я проверял до нескольких мегабайт) ):

curl -v https://...
< HTTP/2 200 
< content-type: text/plain;charset=utf-8
< x-cloud-trace-context: 3872abb809e97a76298f4c46b9217656;o=1
< date: Sat, 07 Mar 2020 17:18:48 GMT
< server: Google Frontend
< content-length: 2450359

(Пример содержит 50k чанков!)

Есть ли способ, чтобы GFE проходил через чанкованную кодировку?

1 Ответ

0 голосов
/ 08 марта 2020

Cloud Run не поддерживает потоковые ответы, когда данные отправляются клиенту в виде инкрементных блоков во время обработки запроса. Все данные из вашей службы отправляются в виде одного HTTP-ответа.

Кроме того, заголовки «Content-Length» и «Transfer-Encoding» удаляются из ответов, которые может обслуживать ваше приложение. Затем эти заголовки добавляются интерфейсом Google, и, наконец, ответ отправляется.

Источник информации:

1) Внутренние беседы с командой разработчиков Cloud Run .

2) Технический документ по Google Cloud Security, в котором подробно описывается GFE (внешний интерфейс Google), который находится перед управлением Cloud Run.

https://services.google.com/fh/files/misc/security_whitepapers_march2018.pdf

...