2012-02-06 35 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。據推測,客戶可能存在問題,或者沿途的某個代理服務器出問題了。