Проблема: я хочу служить 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
) и сохраните еще одну копию. Кроме того, это заставило бы меня управлять дополнительным кешем преобразованных файлов, которые необходимо было бы сделать недействительными, очистить и т. Д., Или изменить исходные файлы, что может нарушить работу других систем, которые их используют.
LF
к CRLF
как он поступает?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
на проводеПохоже, у вас будет много проблем, чтобы обойти (серьезное ИМХО) ограничение в Блокноте. Можно ли установить в системе более умный текстовый редактор, например Блокнот ++?