通过 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 包转发给客户端。这样客户端接收到的 HTTP 包就好像它来自 APEX,而不知道它是由代理转发的。这在 30 次中有 29 次按预期工作,但有时它的行为如上所述。这是代理中的错误吗?您能否建议一个可能的解决方法?
这不是包装,这是由于
transfer-encoding: chunked
标题。见https://en.wikipedia.org/wiki/Chunked_transfer_encoding0 是最终块的信号。从上面的页面:
和
试试
SetEnv proxy-nokeepalive 1
你的 Apache mod_proxy 配置。或者试试SetEnv proxy-sendcl 1
SetEnv proxy-sendchunked 0
有关解释,请参见http://httpd.apache.org/docs/2.4/mod/mod_proxy.html#request-bodies 。