2013-05-28 3 views
0

У меня крошечное веб-приложение Java, поддерживаемое Apache Camel. Он использует компонент сервлета Camel. Это приложение предназначено для подключения и приема данных с устройств.Не отправляйте заголовки ответов вообще

Насколько мы платим за трафик, мне интересно, если есть способ отклонить все заголовки ответов с веб-сервера и отправить только код состояния.

Update:

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) 

В конце StackTrace:

[   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 response. –

+0

Нет серьезно, я просто хочу, чтобы мой веб-сервер не отправлял никаких заголовков. Это так сложно? Должен ли я рассматривать TCP вместо этого? – ruruskyi

+1

Заголовки по HTTP есть по какой-то причине, многие из заголовков имеют мандат (с различными заголовками ответов в ДОЛЖНО и ТРЕБУЕМЫЙ уровень соответствия, описанный RFC2119). Вы можете легко сломать клиент или брандмауэр или балансировщик нагрузки, удалив требуемые заголовки ответа. –

ответ

0

Окончательный ответ на этот вопрос в том, что вы можете удалить большую часть заголовков из Camel, но Tomcat/Jetty добавит некоторые из них в любом случае. Самые маленькие заголовки у меня были:

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

Это по-прежнему неприемлемо в моем случае, так что я буду использовать Apache Mina и UDP/TCP вместо HTTP.

+1

'Date' и' Server' не добавлены Jetty. Кроме того, «Transfer-Encoding: chunked» несовместимо с «Content-Length: 0', поскольку« Transfer-Encoding »используется для контента без определенной длины (по крайней мере, так оно работает в Jetty), но у вас есть один ваш пример. –

1

Вы можете сказать, верблюд, чтобы удалить все заголовки на конец маршрута. Тогда ответ не имеет заголовков.

from("jetty:...") 
    ... 
    .removeHeaders("*"); 

Смотрите некоторые из этих страниц также

Смежные вопросы