2016-07-06 5 views
2

Jersey ReST 클라이언트를 통해 POST 요청을 보내면 자동으로 헤더 전송 인코딩 : [chunked]을 사용합니다.Transfer 인코딩없이 POST 요청을 보내는 방법 : Jersey ReST Client 2.22.2

content-length : 전송 인코딩 대신을 사용하는 방법이 있습니까? 콘텐츠 길이 속성을 추가 한 후

WebTarget webTarget = client.target(connection.getServerUrl()); 
    Invocation.Builder builder = webTarget.request(MediaType.APPLICATION_XML); 
    Response response = builder.post(Entity.xml(requestBroker)); 

너무 동작이 데이터가 덩어리로 전송되고, 따라서 보낸 사람이 시작에

WebTarget webTarget = client.target(connection.getServerUrl()); 
    Invocation.Builder builder = webTarget.request(MediaType.APPLICATION_XML); 
    Entity entity = Entity.xml(requestBroker); 
    client.property("Content-Length", entity.toString().getBytes().length); 
    Response response = builder.post(Entity.xml(requestBroker)); 

답변

2

HTTP 1.1 버전 이후 청크 분할 전송 인코딩, POST에 대한 기본값입니다 동일합니다 해당 콘텐츠의 전체 크기를 알기 전에 동적으로 생성 된 콘텐츠를 전송합니다. 각 청크의 크기는 청크 자체 바로 전에 전송되어 수신자가 청크에 대한 데이터 수신을 마친 시점을 알 수 있습니다. 데이터 전송은 길이가 0 인 최종 청크에 의해 종료됩니다.

내용 길이의 사용을 강제 할 수있는 방법이 있습니까 : 당신의 POST 요청을 보내기 전에 Content-Length 헤더를 설정하는 대신 전송 인코딩

. 그러나 이것은 http 1.0에서만 작동하며 내용 길이를 설정하면 게시 요청 데이터 크기가 내용 길이보다 큰 경우 수신 된 데이터가 잘립니다.

HTTP 프로토콜 1.1 버전에서 은 청크 전송 메커니즘이 항상으로 간주되며 TE (전송 인코딩) 요청 헤더 필드에 나열되어 있지 않더라도 허용되며 다른 전송 메커니즘과 함께 사용되는 경우에도 허용됩니다 항상 전송 된 데이터에 마지막으로 적용되어야하며 한 번 이상 적용되어야합니다. 출처 위키 백과 - Chunked Transfer Encoding


응답에있는 반면, 우리는 response.setBufferSize를 사용하여 응답에 버퍼 크기를 설정하여 전송 인코딩을 피할 수있다(). 그러나 우리의 응답 크기가 bufferSize를 초과하면 Transfer-Encoding : Chunked로 대체됩니다.


Different Transfer Mechanisms

추가 정보 :

Content-Length header versus chunked encoding

Remove Transfer-Encoding:chunked in the POST request?

avoiding chunked encoding of HTTP/1.1 response

그것이 도움이되기를 바랍니다!

+0

@Amarnath 콘텐츠 - 길이 헤더를 추가 한 후에도 청크 분할 전송 인코딩을 선택했습니다. – Rohit

+0

@Amarnath - 답장을 보내 주셔서 감사합니다. 제가 직면 한 문제는 요청 측에 있습니다. – Rohit

+0

@Rohit - 더 많은 정보가 추가되었습니다. –