Apache2 mod_proxy は HTTP ヘッダーを転送するのではなくラップします

Apache2 mod_proxy は HTTP ヘッダーを転送するのではなくラップします

Apache プロキシ経由で Oracle Apex サーバーにアクセスすると、サーバーからの応答として次の HTTP パッケージが時々返されます。

Connection:Keep-Alive
Date:Fri, 20 Jan 2017 16:00:24 GMT
Keep-Alive:timeout=5, max=100
Server:Apache/2.4.6 () PHP/5.4.16
Transfer-Encoding:chunked

0
HTTP/1.1 200 OK
Server: Oracle XML DB/Oracle Database
Content-Type: text/html; charset=utf-8
Content-Length: 33388

ACTUAL HTML PAGE FROM APEX

0 がどこから来るのかはわかりません。ただし、プロキシは APEX から取得した完全な HTTP 応答 (HTTP ヘッダーを含む) を HTTP 本体として別の HTTP パッケージにラップしているようです。

<Apache HTTP PACKAGE>
    <Apache HTTP HEADER>
        Connection:Keep-Alive
        Date:Fri, 20 Jan 2017 16:00:24 GMT
        Keep-Alive:timeout=5, max=100
        Server:Apache/2.4.6 () PHP/5.4.16
        Transfer-Encoding:chunked

    </Apache HTTP HEADER>
    <Apache HTTP BODY>
        0
        <APEX HTTP PACKAGE>
                HTTP/1.1 200 OK
                Server: Oracle XML DB/Oracle Database
                Content-Type: text/html; charset=utf-8
                Content-Length: 33388

                ACTUAL HTML PAGE FROM APEX
        </APEX HTTP PACKAGE>
    </Apache HTTP BODY>
</Apache HTTP PACKAGE>

代わりに、プロキシは HTTP パッケージをクライアントに転送するだけです。クライアントは、プロキシによって転送されたことを意識することなく、APEX から送信されたかのように HTTP パッケージを受信します。これは 30 回中 29 回は期待どおりに動作しますが、上記のように動作する場合もあります。これはプロキシのバグでしょうか? 可能な回避策を提案していただけますか?

答え1

これはラッピングではなく、ヘッダーによるものですtransfer-encoding: chunkedhttps://en.wikipedia.org/wiki/チャンク転送エンコーディング

0 は最後のチャンクの信号です。上記のページから:

各チャンクは、埋め込まれたデータのオクテット数で始まります。この数は ASCII の 16 進数で表され、その後にオプションのパラメータ (チャンク拡張) と終了 CRLF シーケンスが続き、最後にチャンク データが続きます。チャンクは CRLF で終了します。

そして

終了チャンクは、長さが 0 である点を除いて、通常のチャンクです。その後に続くのは、エンティティ ヘッダー フィールドのシーケンス (空の場合もあります) で構成されるトレーラーです。通常、このようなヘッダー フィールドはメッセージのヘッダーで送信されますが、メッセージ エンティティ全体を処理した後にヘッダー フィールドを判別する方が効率的な場合があります。その場合、これらのヘッダーをトレーラーで送信すると便利です。

SetEnv proxy-nokeepalive 1Apache mod_proxyの設定で試してください。または試してください

SetEnv proxy-sendcl 1

SetEnv proxy-sendchunked 0

見るhttp://httpd.apache.org/docs/2.4/mod/mod_proxy.html#リクエストボディ説明のため。

関連情報