Cloud Run / «Google Frontend», по-видимому, полностью буферизует ответы из приложения Cloud Run, даже если для ответа используется кодировка передачи по частям. Это плохо для инкрементального рендеринга.
У меня есть Java веб-приложение на основе com.sun. net .HttpServer, которое поддерживает чанкованное кодирование для ответа. Особенно очистка выходного потока создает чанк, поэтому я могу сделать:
- запись строки ответа
- грипп sh
- вычислить за 10 с
- напишите больше строк ответа
Локально, это приводит к получению фрагментированного ответа:
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 проходил через чанкованную кодировку?