JSONデータをクライアントに送信することでAJAXリクエストに応答するWebサーバーがあります。問題は、JSONデータのコンテンツタイプが「application/json」ではなく「text/html」であることです(これはOracle APEXサーバーであり、バグはOracleによって認識されますが、修正されません)。
クライアントとサーバーの間には、SSLプロキシとして構成されたApache Webサーバーがあります。そのプロキシは、サーバーからクライアントに送信されるすべての「text/html」データをスキャンし、必要に応じてリンクを書き換え、残念ながら「不正な」htmlデータも修正します。サーバーから送信されたJSONデータにはtext/htmlというラベルが付けられているため、これらのhtml修正はJSONデータにも適用され(たとえば、<html> <body> ..タグが追加されます)、要求元のクライアントでは使用できなくなります(解析エラー)。
今まで試したこと
<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 <場所>ルールが適用されました。
場所を2つのセクションに分割します。
1。 <Location /apex/>
-ここにProxyPassReverseオプションを配置する必要があります。
2。 <Location /apex/(?!wwv_flow\.show)>
-これは/apex/wwv_flow.show
以外のすべてに一致します
ProxyPassReverseは文字どおり場所を取得し、正規表現に夢中になるため、最初のセクションが必要です。異なるディレクティブでこのような問題が発生した場合は、それらをここに移動してください。