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: chunked
encabezado. 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 1
su 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.