2011-08-02 10 views
1

WebServiceProvider가 구현 한 웹 서비스에서 java의 HTTP Server 객체를 사용하고 있습니다. 클라이언트 요청에 상관없이 답변은 청크로 처리되어 콘텐츠 길이가 필요합니다. 그래서 문제는 서버에 있고 웹 서버 공급자가 아니라고 가정합니다. 맞습니까? 및 콘텐츠 길이를 사용하고 청크가 아닌 http 헤더를 구성하려면 어떻게해야합니까?콘텐츠 길이를 사용하고 인코딩을 전송하지 않도록 HTTPServer를 구성하는 방법 : 청크 분할?

HttpServer m_server = HttpServer.create(); 
    Endpoint ep= Endpoint.create(new ep()); 
    HttpContext epContext = m_server.createContext("/DownloadFile"); 
    ep.publish(downloadFileContext); 

답변

0

나는 com.sun.net.httpserver HTTPServer에 대해 이야기하고 있다고 가정합니다. 또한 HTTPServer를 지원하는 일부 서비스 공급자를 사용하여 Endpoint.publish을 호출하여 서버를 서비스에 연결한다고 가정합니다.

키는 HttpExchange.sendResponseHeaders 방법이다 응답 길이 매개 변수가 0보다 큰

경우이 보내 정확한 바이트 수를 지정하고 애플리케이션 데이터의 정확한 양을 전송한다. 응답 길이 매개 변수가 0이면 청크 전송 인코딩이 사용되며 임의의 양의 데이터가 전송 될 수 있습니다. 응용 프로그램은 OutputStream을 닫음으로써 응답 본문을 종료합니다.

따라서 핸들러가 responseLength에 양수 값을 전달하는 한 Content-Length가 사용됩니다. 물론 그렇게하기 위해서는 미리 전송할 데이터의 양을 알아야합니다. 그렇지 않을 수도 있습니다. 그것이 유무에 관계없이 바인딩의 구현에 전적으로 의존하는지, 나는 두렵습니다. 나는 이것이 표준화되었다고 생각하지 않는다. 사실, 나는 WebServiceProvider/HTTPServer가 전혀 표준화되어 있지 않다고 믿는다.

그러나 공급자가 비협조적 인 경우에도 버퍼링을 추가하는 Filter을 작성하고이를 서비스를 게시하는 데 사용하는 HttpContext에 추가하십시오. 이 작업을 수행하려면 HttpExchange 구현을 작성하여 데이터를 버퍼링하고 처리기가 해당 응답을 작성하는 필터 체인을 전달한 다음 다시 돌아올 때 버퍼링 된 컨텐츠를 작성하고, 그렇게 할 때 responseLength을 설정하십시오.

+0

안녕하세요. 그것은 abour 소리,하지만 웹 서비스는 종점 관련된 그래서 서버에서 일부 컨텍스트에 게시 된, 그래서 실제로 서버 자체를 통해 응답을 관리하지 않는 응답을 웹 서비스에서 전송됩니다. – Sophie

+0

@ Sophie : 이해가 안됩니다, 미안 해요. HTTPServer에 웹 서비스를 게시하는 코드를 제어하지 않는다는 말입니까? 코드가 작동하는 방식에 대해 더 자세히 설명하고 질문을 수정할 수 있습니까? –

+0

나는 코드 예제를 추가했다. "ep"는 내가 가지고있는 웹 서비스입니다. 클라이언트가 http : // ip_add/DownloadFile을 실행하면 내 웹 서비스로 이동합니다. 나는 또한 전송할 데이터의 길이를 알고있다. – Sophie