请在回答之前完整阅读该问题。
问题描述:KnockoutJs目前正在我们的软件中用于前端模板。 有时模板请求(xhr)没有得到a而不是模板出现在屏幕上,错误:
显示“无法加载模板.HTTP状态代码:0。”
。
问题详细信息:
我已经看到 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)来解决此问题。
这解决了问题,但没有解决它的原因。非常感谢对这个问题的任何见解。