web-dev-qa-db-ja.com

mod_proxy(_html)およびバグのあるWebサーバー(JSONデータのtext / htmlを配信)

JSONデータをクライアントに送信することでAJAXリクエストに応答するWebサーバーがあります。問題は、JSONデータのコンテンツタイプが「application/json」ではなく「text/html」であることです(これはOracle APEXサーバーであり、バグはOracleによって認識されますが、修正されません)。

クライアントとサーバーの間には、SSLプロキシとして構成されたApache Webサーバーがあります。そのプロキシは、サーバーからクライアントに送信されるすべての「text/html」データをスキャンし、必要に応じてリンクを書き換え、残念ながら「不正な」htmlデータも修正します。サーバーから送信されたJSONデータにはtext/htmlというラベルが付けられているため、これらのhtml修正はJSONデータにも適用され(たとえば、<html> <body> ..タグが追加されます)、要求元のクライアントでは使用できなくなります(解析エラー)。

今まで試したこと

  • /apex/wwv_flow.showは、JSONデータを配信する関数です。/apex /の残りは「通常の方法」でプロキシする必要がありますが、書き換えることなくプロキシすることを望みます。
  • どの<Location>ルールが適用されるかをトレースするために、「Header set X-Rule -...」を追加しました。

 <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>

その結果、「application/json」というラベルの付いたJSONデータが取得されますが、「<html> <body> ...」タグでHTMLフィルター処理されます。さらに、「X-Rule…」ヘッダー(「X-Rule-apex」および「X-Rule-apex-wwv_flow.show」)の両方が到着するデータパッケージに設定されています。つまり、both <場所>ルールが適用されました。

  • Mod_proxyに<Location "/apex/wwv_flow.show">が適合する場合にのみ適用するように指示してから停止する方法はありますか?
  • 「不正な」htmlデータの修正を無効にすることは可能ですか?何も見つかりませんでした。
  • URLに「wwv_flow.show」が含まれている場合、処理を停止するように<Location/apex />に指示することは可能ですか?また、何も見つかりませんでした。
  • または、問題を解決するために考えられない他のオプションがありますか?
2
camikusch

場所を2つのセクションに分割します。


1。 <Location /apex/>-ここにProxyPassReverseオプションを配置する必要があります。
2。 <Location /apex/(?!wwv_flow\.show)>-これは/apex/wwv_flow.show以外のすべてに一致します


ProxyPassReverseは文字どおり場所を取得し、正規表現に夢中になるため、最初のセクションが必要です。異なるディレクティブでこのような問題が発生した場合は、それらをここに移動してください。