首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么原因"java.io.IOException:流被重置:取消“与okhttp和spdy?

什么原因"java.io.IOException:流被重置:取消“与okhttp和spdy?
EN

Stack Overflow用户
提问于 2014-06-12 17:30:46
回答 3查看 15.5K关注 0票数 12

我正在试验OKHttp (版本2.0.0-RC2)和SPDY,并且在一些初步测试中经常看到IOException: stream was reset: CANCEL,可能是10%或更多的所有请求。在使用Apache和常规HttpClient时,据我所知,我们没有看到任何类似的问题。我非常肯定,当SPDY被禁用( OkHttp ) (client.setProtocols(ImmutableList.of(Protocol.HTTP_1_1)))时,我们也没有看到任何类似于SPDY的东西,但是我还没有做足够的测试来达到100%的自信。

This previous question看到了这些异常,并建议忽略它们,但这似乎很疯狂:我们在从服务器读取数据时得到了一个异常,因此我们中止了数据处理代码(使用Jackson)。在这种情况下我们需要做点什么。当然,我们可以重试请求,但有时它是一个无法重试的POST请求,如果我们已经开始从服务器接收数据,那么服务器已经采取了所请求的操作,这是一个很好的选择。

理想情况下,我们可以对客户端和/或服务器进行一些配置,以减少这些异常的发生率,但我对SPDY的理解还不够深入,甚至不知道从哪里开始查找,或者建议我们的服务器-管理团队开始查找。

堆栈跟踪,以防有帮助:

代码语言:javascript
运行
复制
java.io.IOException: stream was reset: CANCEL
  at com.squareup.okhttp.internal.spdy.SpdyStream$SpdyDataSource.checkNotClosed(SpdyStream.java:442)
  at com.squareup.okhttp.internal.spdy.SpdyStream$SpdyDataSource.read(SpdyStream.java:344)
  at com.squareup.okhttp.internal.http.SpdyTransport$SpdySource.read(SpdyTransport.java:273)
  at okio.RealBufferedSource.exhausted(RealBufferedSource.java:60)
  at okio.InflaterSource.refill(InflaterSource.java:96)
  at okio.InflaterSource.read(InflaterSource.java:62)
  at okio.GzipSource.read(GzipSource.java:80)
  at okio.RealBufferedSource$1.read(RealBufferedSource.java:227)
  at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.loadMore(UTF8StreamJsonParser.java:174)
  at com.fasterxml.jackson.core.base.ParserBase.loadMoreGuaranteed(ParserBase.java:431)
  at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._finishString2(UTF8StreamJsonParser.java:2111)
  at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._finishString(UTF8StreamJsonParser.java:2092)
  at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.getText(UTF8StreamJsonParser.java:275)
  at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeObject(JsonNodeDeserializer.java:205)
  at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeArray(JsonNodeDeserializer.java:230)
  at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeObject(JsonNodeDeserializer.java:202)
  at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:58)
  at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:15)
  at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:2765)
  at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:1546)
  at com.fasterxml.jackson.core.JsonParser.readValueAsTree(JsonParser.java:1363)
  at (application-level code...)
EN

Stack Overflow用户

发布于 2014-12-03 09:38:30

我们之所以有这个问题,是因为http报头坏了。默认情况下,android Base64编码器增加了新行,这破坏了我们的授权头。

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24190507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档