无法加载模板。 HTTP状态代码:0

时间:2017-06-01 11:06:58

标签: google-chrome http ssl caching knockout.js

请在回答之前完整阅读该问题。

问题描述:KnockoutJs目前正在我们的软件中用于前端模板。 有时模板请求(xhr)没有得到a而不是模板出现在屏幕上,错误:

  

“无法加载模板.HTTP状态代码:0。”

显示

问题详细信息:

  • 这可能发生在 Any,All或None 模板上,并且出现似乎是随机的。
  • 我已经看到 Chrome和IE 中的错误,但在Firefox中没有。在Chrome上,它似乎更常见。

  • 状态代码:0表示请求未收到响应,并且已在网络选项卡中确认。

  • 一旦特定模板显示此消息(并且请求失败),同一模板的每个其他请求将在同一个http会话中失败。

  • 可以通过打开 DevTools - >修复此问题。网络选项卡并选中禁用缓存复选框。

  • 可以在隐身浏览器中看到该错误,并使用 Ctrl - F5 刷新页面似乎不会影响该错误,并且不会像上面那样解决它。

我知道这似乎是一个缓存问题。这是有趣的地方。 我们通过chrome://net-internals中找到的事件页面查看了HTTP和SSL信息,了解发生错误的模板,我们看到了以下内容:

SSL信息:

t=2156 [st= 0] +SOCKET_IN_USE  [dt=41]
                --> source_dependency = 4991 (HTTP_STREAM_JOB)
t=2156 [st= 0]    SOCKET_BYTES_SENT
                  --> byte_count = 957
t=2156 [st= 0]    SSL_SOCKET_BYTES_SENT
                  --> byte_count = 928
t=2197 [st=41]    SOCKET_READ_ERROR
                  --> net_error = -101 (ERR_CONNECTION_RESET)
                  --> os_error = 10054
t=2197 [st=41]    SSL_READ_ERROR
                  --> error_lib = 33
                  --> error_reason = 101
                  --> file = "c:\\b\\c\\b\\win64_pgo\\src\\net\\socket\\socket_bio_adapter.cc"
                  --> line = 107
                  --> net_error = -101 (ERR_CONNECTION_RESET)
                  --> ssl_error = 1
t=2197 [st=41]    SOCKET_CLOSED
t=2197 [st=41] -SOCKET_IN_USE
t=2197 [st=41] -SOCKET_IN_USE
t=2197 [st=41] -SOCKET_ALIVE

可以找到socket_bio_adapter.cc文件here

HTTP信息:

...
t=2076 [st=  1]     -HTTP_TRANSACTION_SEND_REQUEST
t=2076 [st=  1]     +HTTP_TRANSACTION_READ_HEADERS  [dt=41]
t=2076 [st=  1]        HTTP_STREAM_PARSER_READ_HEADERS  [dt=40]
                       --> net_error = -101 (ERR_CONNECTION_RESET)
t=2116 [st= 41]        HTTP_TRANSACTION_RESTART_AFTER_ERROR
                       --> net_error = -101 (ERR_CONNECTION_RESET)
t=2117 [st= 42]     -HTTP_TRANSACTION_READ_HEADERS
t=2117 [st= 42]     +HTTP_STREAM_REQUEST  [dt=0]
t=2117 [st= 42]        HTTP_STREAM_JOB_CONTROLLER_BOUND
                       --> source_dependency = 4988 (HTTP_STREAM_JOB_CONTROLLER)
t=2117 [st= 42]        HTTP_STREAM_REQUEST_BOUND_TO_JOB
                       --> source_dependency = 4989 (HTTP_STREAM_JOB)
t=2117 [st= 42]     -HTTP_STREAM_REQUEST
...

它似乎不仅仅是一个缓存问题,但我不明白如何通过禁用DevTools中的缓存来关联和修复此SSL SOCKET_READ_ERROR。

技术细节:

JQuery 2.2.4
KnockoutJs 3.2.0
TLS 1.2
Chrome 58.0.3029.110 (64-bit)

我研究了这个问题并找到了无数的资源,但似乎没有一个资源直接适用于这个特定的问题。

问题:

  • 这里发生了什么?缓存如何与SSL直接相关?或者只是这样?

  • 有什么能够澄清这个问题的零星性质?

编辑

我得出结论,失败的请求实际上并未到达应用程序网络。在客户端到达后端环境之前,这些请求在客户端被中断。

通过在发送之前向所有模板请求添加两个额外的HTTP标头(Cache-Control:no-cache,Pragma:no-cache)来解决此问题。

这解决了问题,但没有解决它的原因。非常感谢对这个问题的任何见解。

0 个答案:

没有答案