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
모든 헤더를 제거하지 않으려면 HTTP 클라이언트가 응답 데이터를 디코딩하는 방법을 모르고 HTTP/1.1 파이프 라인을 중단해야합니다. 네트워크 바이트를 저장하려면 CPU에서 네트워크 바이트를 교환하고 표준 HTTP Gzip 응답 인코딩을 사용하여 응답을 압축하십시오. –
심각하게, 나는 웹 서버가 헤더를 보내지 않기를 바란다. 그렇게 복잡한가요? 대신 TCP를 고려해야합니까? – ruruskyi
HTTP 헤더가 이유가 있기 때문에 여러 헤더가 필수입니다 (RFC2119에 설명 된 MUST 및 REQUIRED 수준의 다양한 응답 헤더 포함). 필요한 응답 헤더를 제거하여 클라이언트, 방화벽 또는로드 밸런서를 쉽게 끊을 수 있습니다. –