У меня крошечное веб-приложение 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
Будьте осторожны, вы не хотите удалять ВСЕ заголовки, в противном случае ваш HTTP-клиент не будет знать, как декодировать данные ответа, и это наверняка сломает любую конвейерную обработку HTTP/1.1. Если вы хотите сохранить сетевые байты, то обменять CPU на сетевые байты и сжать ответ, используя стандартную кодировку HTTP Gzip response. –
Нет серьезно, я просто хочу, чтобы мой веб-сервер не отправлял никаких заголовков. Это так сложно? Должен ли я рассматривать TCP вместо этого? – ruruskyi
Заголовки по HTTP есть по какой-то причине, многие из заголовков имеют мандат (с различными заголовками ответов в ДОЛЖНО и ТРЕБУЕМЫЙ уровень соответствия, описанный RFC2119). Вы можете легко сломать клиент или брандмауэр или балансировщик нагрузки, удалив требуемые заголовки ответа. –