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에서 오는 것처럼 HTTP 패키지를 수신합니다. 이는 30번 중 29번은 예상대로 작동하지만 때로는 위에서 설명한 대로 작동합니다. 이것은 프록시의 버그입니까? 가능한 해결 방법을 제안해 주시겠습니까?
답변1
이것은 포장이 아니며 헤더 때문입니다 transfer-encoding: chunked
. 보다https://en.wikipedia.org/wiki/Chunked_transfer_encoding
0은 마지막 청크의 신호입니다. 위 페이지에서:
각 청크는 ASCII의 16진수로 표현된 포함된 데이터의 옥텟 수로 시작하고 그 뒤에 선택적 매개변수(청크 확장)와 종결 CRLF 시퀀스, 청크 데이터가 옵니다. 청크는 CRLF에 의해 종료됩니다.
그리고
종료 청크는 길이가 0이라는 점을 제외하면 일반 청크입니다. 그 뒤에는 엔터티 헤더 필드의 (비어 있을 수도 있는) 시퀀스로 구성된 트레일러가 옵니다. 일반적으로 이러한 헤더 필드는 메시지 헤더에 전송됩니다. 그러나 전체 메시지 엔터티를 처리한 후에 이를 결정하는 것이 더 효율적일 수 있습니다. 이 경우 해당 헤더를 예고편으로 보내는 것이 유용합니다.
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설명을 위해.