Удаление фильтра помогло. Оно решило одну проблему, НО создало много новых, и лучше так не делать.
Сама проблема была в файле : - https://github.com/traccar/traccar/blob/master/src/main/java/org/traccar/web/OverrideFilter.java
Место с ошибкой
String alteredContent = new String(wrappedResponse.getCapture())
.replace("${title}", title)
.replace("${description}", description)
.replace("${colorPrimary}", colorPrimary);
response.setContentLength(alteredContent.length());
response.getOutputStream().write(alteredContent.getBytes());
Повторный вызов String(wrappedResponse.getCapture()
возвращает ТОЛЬКО сам документ, не учитывая заголовки, сам ответ становися короче на (приблизительно) 400 БАЙТ. Вызов response.setContentLength
должен получать правильную длинну ответа, модифицированый документ (вместе с заголовками).
Решение вопроса:
String alteredContent = new String(bytes)
.replace("${title}", title)
.replace("${description}", description)
.replace("${colorPrimary}", colorPrimary);
byte[] AC_bytes = alteredContent.getBytes();
int AC_B_length = AC_bytes.length;
response.setContentLength(AC_B_length);
response.getOutputStream().write(AC_bytes);
Все заработало, документ проходит фильтр и не обрезается, все косяки ушли...
Почему тогда у меня всё работает? У вас случайно нету прокси какого-нибудь перед сервером?
У вас случайно нету прокси какого-нибудь перед сервером?
- Есть, но он тут ни при чем, тестирование происходило и локально и через reverse proxy, результат был одинаковый. Локально, браузеры Firefox, Chrome, Opera, удаленно Chrome, Opera, Internet Explorer.
Почему тогда у меня всё работает?
- Вероятно, вы не добавляли кучу МЕТА ТЕГОВ содержащих кириллицу, плюс МЕТА ТЕГИ для open graph. Самое главное, у меня, на даный момент все работает штатно, документ проходит фильтр, кастомизируется, не обрезается. Краулер и индексатор документ прожевывают и остаются довольны.
Удаление фильтра помогло. Оно решило одну проблему, НО создало много новых, и лучше так не делать.
Сама проблема была в файле : - https://github.com/traccar/traccar/blob/master/src/main/java/org/traccar/web/OverrideFilter.java
Место с ошибкой
String alteredContent = new String(wrappedResponse.getCapture()) .replace("${title}", title) .replace("${description}", description) .replace("${colorPrimary}", colorPrimary); response.setContentLength(alteredContent.length()); response.getOutputStream().write(alteredContent.getBytes());
Повторный вызов
String(wrappedResponse.getCapture()
возвращает ТОЛЬКО сам документ, не учитывая заголовки, сам ответ становися короче на (приблизительно) 400 БАЙТ. Вызовresponse.setContentLength
должен получать правильную длинну ответа, модифицированый документ (вместе с заголовками).Решение вопроса:
/* */ String alteredContent = new String(bytes) /* У нас уже есть ПОЛНЫЙ массив байтов, правильной длинны, */ .replace("${title}", title) .replace("${description}", description) .replace("${colorPrimary}", colorPrimary); /* Преобразовали в строку, произвели поиск/замену */ byte[] AC_bytes = alteredContent.getBytes(); /* Преобразовали модифицированную строку опять в массив, http заголовки остались на месте */ int AC_B_length = AC_bytes.length; /* Получили длину ВСЕГО массива, `alteredContent.length()` вернет ТОЛЬКО длину документа*/ response.setContentLength(AC_B_length); response.getOutputStream().write(AC_bytes);
Все заработало, документ проходит фильтр и не обрезается, все косяки ушли...