mod_proxy (_html) и багги Webserver (поставляет текст /html для данных JSON)

У нас есть веб-сервер, который отвечает на запросы AJAX, отправив JSON Data клиенту. Проблема заключается в том, что данные JSON Data содержат текст «text /html» content-type вместо «application /json» (это сервер Oracle APEX, ошибка подтверждается Oracle, но они не будут исправлены).

Между клиентами и сервером находится веб-сервер Apache, настроенный как SSL-прокси. Этот прокси теперь будет сканировать все данные «text /html», переданные с сервера на клиент, переписывать ссылки, если это необходимо, и, к сожалению, также будет исправлять «искаженные» html-данные. Поскольку данные JSON, отправленные с сервера, помечены как text /html, эти исправления html также применяются к ярлыкам JSON Data (<html> <body> .., например, добавляются), что делает его непригодным для использования запрашивающий клиент (ошибки разбора).

То, что я пробовал до сих пор

  • /apex/wwv_flow.show - функция, предоставляющая данные JSON. Я бы хотел, чтобы это было проксировано без какой-либо перезаписи, в то время как остальная часть /вершина /должна быть проксирована «обычным способом».
  • Я добавил «X-Rule -...», чтобы проследить, где <Location> Правило применяется.

 <Location "/apex/wwv_flow.show">
    ProxyPass http://192.168.1.100:8080/apex/wwv_flow.show
    Header set "X-Rule-apex-wwv_flow.show" "1"
    Header set Content-Type "application/json"
 </Location>
 <Location /apex/>
    ProxyPass http://192.168.1.100:8080/apex/
    Header set "X-Rule-apex" "1"
    Header always set Cache-Control "no-cache, no-store, max-age=0, must-revalidate" env=nocache
    SetOutputFilter INFLATE;proxy-html;DEFLATE
    ProxyPassReverse /apex/
    ProxyHTMLURLMap /       /apex/
    ProxyHTMLURLMap /apex  /apex
    ProxyHTMLURLMap /apex/ /apex/
    ProxyHTMLDocType '<!DOCTYPE html>'
 </Location>

В результате я получаю данные JSON Data, помеченные как «application /json», но также HTML-Filtered с тегами «<html> <body> ...». Кроме того, в появившемся пакете данных устанавливаются заголовки «X-Rule ...» («X-Rule-apex» и «X-Rule-apex-wwv_flow.show») что означает как <Местоположение> Правила были применены.

  • Есть ли способ сказать mod_proxy только для применения <Location "/apex/wwv_flow.show"> если он подходит и затем остановится?
  • Можно ли отключить фиксацию «искаженных» html-данных (глобально)? Я ничего не нашел.
  • Можно ли указать <Location /apex /> прекратить обработку, если URL содержит «wwv_flow.show»? И ничего не нашел.
  • Или есть ли другой вариант, о котором я не могу придумать, чтобы решить проблему?
2 голоса | спросил camikusch 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 04 Sep 2015 11:46:12 +0300 2015, 11:46:12

1 ответ


1

Разделите свое местоположение на две части:


1. <Location /apex/> - здесь вы должны установить параметры ProxyPassReverse.
2. <Location /apex/(?!wwv_flow\.show)> - этот будет соответствовать всем остальным, а затем /apex/wwv_flow.show


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

ответил Grzegorz Krzyżankowski 9 Maypm16 2016, 15:29:45

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132