Apache2 mod_proxy envuelve el encabezado HTTP en lugar de reenviarlo

Apache2 mod_proxy envuelve el encabezado HTTP en lugar de reenviarlo

Al acceder a un servidor Oracle Apex a través de un proxy Apache, esporádicamente obtengo el siguiente paquete HTTP como respuesta del servidor:

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

No sé de dónde viene el 0. Aunque parece que el Proxy envuelve la respuesta HTTP completa que obtiene de APEX (incluido el encabezado HTTP) como un cuerpo HTTP en otro paquete 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>

En cambio, el proxy debería simplemente reenviar el paquete HTTP al cliente. Para que el cliente reciba el Paquete HTTP como si viniera de APEX sin ser consciente de que fue reenviado por el Proxy. Esto funciona como se esperaba 29 de 30 veces, pero a veces se comporta como se describe anteriormente. ¿Es esto un error en el proxy? ¿Podría sugerir una posible solución?

Respuesta1

Esto no es un envoltorio, se debe al transfer-encoding: chunkedencabezado. Verhttps://en.wikipedia.org/wiki/Chunked_transfer_encoding

El 0 es la señal del fragmento final. De la página de arriba:

Cada fragmento comienza con el número de octetos de los datos que incorpora expresados ​​como un número hexadecimal en ASCII seguido de parámetros opcionales (extensión del fragmento) y una secuencia CRLF final, seguida de los datos del fragmento. CRLF termina el fragmento.

y

El fragmento final es un fragmento normal, con la excepción de que su longitud es cero. Le sigue el avance, que consta de una secuencia (posiblemente vacía) de campos de encabezado de entidad. Normalmente, dichos campos de encabezado se enviarían en el encabezado del mensaje; sin embargo, puede resultar más eficaz determinarlos después de procesar toda la entidad del mensaje. En ese caso, es útil enviar esos encabezados en el avance.

Pruebe SetEnv proxy-nokeepalive 1su configuración mod_proxy de Apache. O tratar

SetEnv proxy-sendcl 1

SetEnv proxy-sendchunked 0

Verhttp://httpd.apache.org/docs/2.4/mod/mod_proxy.html#request-bodiespara explicaciones.

información relacionada