Назад | Перейти на главную страницу

Скажите apache преобразовать LF в CRLF для текста / простого

Проблема: я хочу служить CRLF из файлов, закодированных как LF

у меня есть apache2 httpd веб-сервер на базе Linux, настроенный для обслуживания (больших) файлов журнала (*.log), созданный симулятором на базе Linux.

Эти файлы журналов имеют стиль Unix LF окончание, а не в стиле Windows CRLF. CRLF также оказывается стандартом для текстовых файлов в http протокол.

Когда я просматриваю их в браузере Windows, они загружаются в Notepad.exe, и весь текст (неправильно) находится в одной строке; если я не переименую журналы на сервере из *.log к *.txt.

Похоже, что Microsoft Windows, вероятно, обрабатывает *.txt особенно, и преобразование концовок по мере их поступления.

Учитывая эти подсказки, как я могу изменить настройку, чтобы пользователи-клиенты правильно видели файлы, независимо от их платформы / браузера.


Подробнее о проблеме: почему я не могу сделать очевидное

Анализируя журналы, я обнаружил, что .txt служит пантомимой text/plain и .log так как text/x-log, но переключение .log к text/plain с помощью SetType не решил проблему.

В производственной системе я не смогу легко изменить файлы так, чтобы они заканчивались на .txt.

Журналов слишком много и они велики, чтобы я мог преобразовать их с помощью (например, unix2dos) и сохраните еще одну копию. Кроме того, это заставило бы меня управлять дополнительным кешем преобразованных файлов, которые необходимо было бы сделать недействительными, очистить и т. Д., Или изменить исходные файлы, что может нарушить работу других систем, которые их используют.

  1. Есть ли параметр конфигурации Apache httpd, который сообщает Windows / Internet Explorer (и другой ОС / браузеру), что его необходимо расширить? LF к CRLF как он поступает?
  2. ИЛИ Могу я как-нибудь сказать Apache заменить LF с участием CRLF на лету, как он его обслуживает?

Что я пробовал

Я посмотрел в комплекте Apache mod_mime модуль и его директивы AddType и AddCharset но это не решает проблему и даже не претендует на нее.

В документации Apache ничего не говорится об окончании строки.

Документация MIME по text тип говорит содержание должен быть в формате CRLF.

Также кажется, что окончание строки не рассматривается стандартами кодирования кодировки.

Решение (несовершенное), на котором я остановился, - использовать Apache mod_ext_filter:

ExtFilterDefine logwin mode=output cmd=/usr/bin/unix2dos intype=text/x-log
AddOutputFilter logwin .log
# Note that apache2 defines .log as having mime-type text/x-log by default.

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

Это не лучшее решение для сильно нагруженных машин, так как вилочный погрузчик unix2dos медленнее, чем внутренняя обработка apache. Также требуется преобразование для каждого чтения файла, что неэффективно.

К сожалению, фонд apache не предоставил встроенный фильтр модов для этого сценария, и у меня нет времени писать / поддерживать его.

Однако я не ожидаю высокой нагрузки на эту машину, поэтому, если судить по инженерным усилиям, это хорошее решение.

  • Соответствует mime спецификации для текста / простого путем кодирования CRLF на проводе
  • Не требует специальных действий на стороне клиента. Хотя я счастлив использовать текстовый редактор получше, я не могу ожидать, что все пользователи перейдут
  • Простая реконфигурация, если мне нужно переместить веб-серверы
  • Не требует, чтобы генератор журнала использовал неродной (не-unix) формат конца строки

Похоже, у вас будет много проблем, чтобы обойти (серьезное ИМХО) ограничение в Блокноте. Можно ли установить в системе более умный текстовый редактор, например Блокнот ++?