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

Изображения и AJAX не загружаются при включенном mod_proxy_html

Наша компания в настоящее время поддерживает (очень старое) приложение для работы с базами данных с веб-интерфейсом, написанное в 4th Dimension (2003) со встроенным веб-сервером (предоставляемым расширением Web Server 4D). Поскольку веб-сервер не поддерживает SSL, наш клиент настроил Apache для обработки внешних HTTPS-соединений (через <VirtualHost>) и направить весь трафик на сервер WS4D через HTTP, используя mod_proxy. Маршрутизация работает отлично.

Проблема в том, что сервер WS4D часто выводит неработающие URL-адреса при создании страницы. Поскольку сервер WS4D не знает об Apache, всякий раз, когда он распечатывает полный URL-адрес (включая домен), он распечатывает внутреннее доменное имя и номер порта в URL-адресе вместо внешнего (например, http: // локальный: 9999 / домашний вместо того https://www.example.com/home). Большинство других ссылок являются относительными (например, /img/smiley.png) и поэтому работают нормально.

Чтобы решить эту проблему, мы попытались настроить сторонний модуль Apache под названием mod_proxy_html переписать ссылки с правильным доменом. Однако всякий раз, когда мы просто активируем модуль в httpd.conf (с ProxyHTMLEnable On, но правила перезаписи не определены), наши запросы PNG и AJAX (которые работали ранее) неожиданно не загружаются! Я не уверен, но думаю, что сервер может возвращать их с неправильным типом MIME.

Кто-нибудь знает, как мы могли бы исправить / отладить эту проблему?

Обновить: Я проверил ссылки для PNG, и, поскольку они относительные (например, /img/smiley.png), они печатаются нормально. Однако, когда я помещаю URL-адрес в свой браузер, я получаю кучу тарабарщины (я полагаю, это двоичное изображение, отформатированное как текст). И, как ни странно, в самом начале есть три HTML-тега: <html><body><p>.

Обновление 2: Теги определенно не добавляется моим браузером (Safari). Когда я выключаюсь mod_proxy_html, изображения загружаются на страницу как обычно, но по-прежнему открываются как текст при прямом посещении URL-адреса. С участием mod_proxy_html выключен, <html><body><p> теги в источнике изображения исчезнут.

Это была проблема типа MIME. Сервер WS4D передавал все PNG в Apache с помощью Content-Type из text/html вместо того image/png, что вызывало mod_proxy_html интерпретировать их как файлы HTML и анализировать их. По-видимому, mod_proxy_html автоматически пытается исправить неправильный HTML, добавляя любые недостающие теги в начало файла, чтобы соответствовать спецификации HTML (возможно, это побочный эффект использования libxml2). Каждый раз, когда мы включали модуль, он продолжал добавлять <html><body><p> в начало всех наших PNG-файлов, из-за чего браузер зависал и не отображал их. Исправление типа MIME полностью устранило проблему.

Мы так и не выяснили, почему именно наш AJAX давал сбой, потому что как только мы исправили PNG, он снова начал работать. Наш код AJAX обычно загружает фрагменты HTML с сервера WS4D через Apache. До того, как мы исправили наши PNG, отображалось сообщение об ошибке, которое обычно отображается только тогда, когда запрос AJAX возвращает код ошибки. Наша теория состоит в том, что сломанные PNG в фрагментах HTML каким-то образом вызвали ошибку, но мы не можем это проверить.

Вывод: Если вы собираетесь использовать mod_proxy_html, перепроверьте свои типы MIME!