【问题标题】:Recovering from HTTP I/O error从 HTTP I/O 错误中恢复
【发布时间】:2012-02-28 10:57:30
【问题描述】:

我们已经公开了一些 REST API。我们在服务器上多次看到 IOExceptions。我们不确定如何从它们中恢复过来。

我们看到的 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)

【问题讨论】:

  • 为什么不包括每个错误的逐字文本? (最好将其格式化为代码,例如使用 Ctrl-K。)
  • 当然。我已附加错误堆栈跟踪。

标签: http tcp network-programming tomcat6 ioexception


【解决方案1】:

某些传入数据的chunked transfer coding 似乎有问题。大概是客户端出了问题,或者是某个地方的代理出了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 2017-09-08
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多