2012-02-06 76 views
1

我们公开了一些REST API。我们在服务器上看到IOExceptions几次。我们不确定我们如何从他们身上康复。从HTTP I/O错误中恢复

,我们看到I/O错误的种类是

  1. 客户端超时 - 我们发送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) 
+0

为什么不包含每个错误的逐字文本? (可能最好将其格式化为代码,例如使用Ctrl-K。) – SamB 2012-02-06 23:57:13

+0

当然。我附加了错误堆栈跟踪。 – 2012-02-07 02:24:48

回答

1

它看起来像有什么东西不对一些输入数据的chunked transfer coding。据推测,客户可能存在问题,或者沿途的某个代理服务器出问题了。