2013-05-28 7 views
0

Apache Camel에 의해 백업 된 아주 작은 Java 웹 응용 프로그램이 있습니다. Camel의 서블릿 컴포넌트를 사용합니다. 이 응용 프로그램은 커넥터가되고 장치에서 데이터를 수신합니다.응답 헤더를 보내지 마십시오.

우리가 트래픽을 지불하는 한, 웹 서버의 모든 응답 헤더를 거부하고 상태 코드 만 보내는 방법이 있으면 흥미 롭습니다.

업데이트 :

from("servlet:///channel?servletName=ChannelServlet") 

... 

.split().method("objectSplitter", "splitRootObject") 
.log("before removeHeaders") 
.removeHeaders("*") 
.log("after removeHeaders") 
.process(new Processor() { 

    @Override 
    public void process(Exchange exchange) throws Exception { 
     Message out = exchange.getOut(); 
     out.removeHeaders("*"); 
     out.setHeader("custom", "custom"); 
     out.setHeader(Exchange.HTTP_RESPONSE_CODE, "200"); 
     out.setBody(""); 
     LOG.debug("In processor"); 
    } 
}); 

난 항상 수신하고 있습니다 : 스택 추적의 끝에서

HTTP/1.1 200 OK 
Transfer-Encoding: chunked 
Host: localhost:8080 
charset: utf-8 
breadcrumbId: ID-eclipse-46977-1369749855622-0-2 
User-Agent: Java/1.7.0_21 
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 
Content-Type: application/octet-stream 
Server: Jetty(7.6.8.v20121106) 

:

[   http-bio-9080-exec-5] route1       INFO before removeHeaders 
[   http-bio-9080-exec-5] Tracer       INFO ID-eclipse-43869-1369751726247-0-12 >>> (route1) log[before removeHeaders] --> removeHeaders[*] <<< Pattern:InOut, Headers:{frame=0, imei=393090335172229, type=SdkMsgFrame, genTime=0, breadcrumbId=ID-eclipse-43869-1369751726247-0-11, key=2aa4678e-2eb8-42c2-9b59-2e816c276cd5, numFrames=1}, BodyType:String, Body:eNo1...Q1GJ+ 
[   http-bio-9080-exec-5] Tracer       INFO ID-eclipse-43869-1369751726247-0-12 >>> (route1) removeHeaders[*] --> log[after removeHeaders] <<< Pattern:InOut, BodyType:String, Body:eNo1...Q1GJ+ 
[   http-bio-9080-exec-5] route1       INFO after removeHeaders 
[   http-bio-9080-exec-5] Tracer       INFO ID-eclipse-43869-1369751726247-0-12 >>> (route1) log[after removeHeaders] --> [email protected] <<< Pattern:InOut, BodyType:String, Body:eNo1...Q1GJ+ 
[   http-bio-9080-exec-5] ServletRoute     DEBUG In processor 
[   http-bio-9080-exec-5] MulticastProcessor    DEBUG Done sequential processing 1 exchanges 
+0

모든 헤더를 제거하지 않으려면 HTTP 클라이언트가 응답 데이터를 디코딩하는 방법을 모르고 HTTP/1.1 파이프 라인을 중단해야합니다. 네트워크 바이트를 저장하려면 CPU에서 네트워크 바이트를 교환하고 표준 HTTP Gzip 응답 인코딩을 사용하여 응답을 압축하십시오. –

+0

심각하게, 나는 웹 서버가 헤더를 보내지 않기를 바란다. 그렇게 복잡한가요? 대신 TCP를 고려해야합니까? – ruruskyi

+1

HTTP 헤더가 이유가 있기 때문에 여러 헤더가 필수입니다 (RFC2119에 설명 된 MUST 및 REQUIRED 수준의 다양한 응답 헤더 포함). 필요한 응답 헤더를 제거하여 클라이언트, 방화벽 또는로드 밸런서를 쉽게 끊을 수 있습니다. –

답변

0

이 질문에 대한 최종 답변은 낙타하지만 톰캣/부두에서 헤더의 대부분을 제거 할 수 있다는 것입니다 어쨌든 그들 중 일부를 추가 할 것입니다.

Date: Thu, 30 May 2013 09:49:30 GMT 
Transfer-Encoding: chunked 
Content-Length: 0 
Server: Apache-Coyote/1.1 

이 여전히 내 경우에는 받아 들일 수없는, 그래서 HTTP 대신 아파치 미나와 UDP/TCP를 사용합니다 : 내가 가지고있는 가장 작은 헤더이었다.

+1

'Date'와'Server'는 Jetty에 의해 추가되지 않았습니다. 또한'Transfer-Encoding : chunked'는'Content-Length : 0'과 호환되지 않습니다.'Transfer-Encoding'은 길이가 정의되지 않은 콘텐츠 (적어도 그것이 Jetty에서 어떻게 작동하는지)에 사용되지만, 너의 본보기. –