Как определить размер ответа HTTP в Google App Engine - PullRequest
1 голос
/ 07 июля 2011

Я пишу приложение для Google App Engine с Java.Определенный сервлет выдает ответы, которые могут превышать 32 мегабайта.На сервере разработки это, похоже, не вызывает никаких проблем.На рабочем сервере мне понадобится способ разделить ответ по нескольким запросам.

Я хочу знать, что происходит на рабочем сервере при превышении лимита.PrintWriter выбрасывает IOException при превышении лимита?Или исключение выдается только после завершения работы сервлета?В идеале я хотел бы иметь возможность рассчитать общий размер ответа перед добавлением каждого раздела (не считая сами байты, поскольку я не знаю размер заголовков HTTP), чтобы я мог правильно очистить конецответ (т.е. добавьте "}" для завершения объекта JSON).Или есть лучший способ справиться с такой ситуацией?

1 Ответ

0 голосов
/ 07 июля 2011

ник справа, текущий размер ответа составляет 32 МБ.

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

HTTP-ответ был слишком велик: 34000134. Ограничение: 33554432.

вы можете попробовать сами, запустив это в http://shell.appspot.com/:

print 'x' * 34 * 1000 * 1000

...