Восстановление из ошибки ввода-вывода HTTP - PullRequest
1 голос
/ 07 февраля 2012

Мы представили некоторые REST API. Мы видим исключения IOException несколько раз на сервере. Мы не уверены, как мы можем оправиться от них.

Вид ошибок ввода-вывода, которые мы видим:

  1. Тайм-аут клиента - мы отправили http-код ошибки client_timed_out http и повторили попытку клиента. Это хорошо работает.

  2. Данные неверны. Например, то, что мы видим, это «Неверный CRLF» Либо это ошибка клиента, либо что-то пошло не так в стеке TCP / IP.

Как вы думаете, это может произойти на уровне TCP / IP? Если да, протокол Http не должен содержать код ошибки, который сервер может отправить клиенту, и клиент может повторить запрос.

Трассировка стека исключений

java.io.IOException: Invalid CRLF
   at org.apache.coyote.http11.filters.ChunkedInputFilter.parseCRLF(ChunkedInputFilter.java:364)
   at org.apache.coyote.http11.filters.ChunkedInputFilter.doRead(ChunkedInputFilter.java:145)
   at org.apache.coyote.http11.AbstractInputBuffer.doRead(AbstractInputBuffer.java:308)
   at org.apache.coyote.Request.doRead(Request.java:422)
   at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:287)
   at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:374)
   at org.apache.catalina.connector.InputBuffer.readByte(InputBuffer.java:300)
   at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:108)
   at java.io.FilterInputStream.read(FilterInputStream.java:66)
   at java.util.zip.CheckedInputStream.read(CheckedInputStream.java:42)
   at java.util.zip.GZIPInputStream.readUByte(GZIPInputStream.java:247)
   at java.util.zip.GZIPInputStream.readUShort(GZIPInputStream.java:239)
   at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:142)
   at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:58)
   at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:67)
   at org.restlet.engine.application.DecodeRepresentation.getDecodedStream(DecodeRepresentation.java:142)
   at org.restlet.engine.application.DecodeRepresentation.getStream(DecodeRepresentation.java:212)
   at com.inlogy.server.ingraph.service.apis.resource.DocumentHashMapResource.post(DocumentHashMapResource.java:57)
   at org.restlet.resource.ServerResource.doHandle(ServerResource.java:380)

1 Ответ

1 голос
/ 07 февраля 2012

Похоже, что-то не так с фрагментарной кодировкой передачи некоторых входящих данных. Предположительно, либо есть проблема с клиентом, либо прокси-сервер где-то попал в тупик.

...