问题描述
我开发了一个 JavaScript 代码,它每隔 500 毫秒定期向 HTTP 服务器发送一个 GET 请求,该请求使用 JSN 格式的文本数据来响应该请求。
function get(theUrl,success,failure,commData)
{
commData = commData || {};
return fetch(theUrl)
.then(function(res)
{
if (!res.ok)
throw Error(res.statusText);
return res;
})
.then(function(res)
{
return res.text();
})
.then(function(html)
{
success(html,commData);
})
.catch(function(error)
{
failure(commData);
});
}
此 javascript 代码是与 index.html 一起从 HTTP 服务器下载的资源(js、css、图像)的一部分。
客户端在几分钟内没有任何问题地收到来自服务器的答复。突然,在下载 index.html 大约 15 分钟后,浏览器检查器显示客户端开始接收 GET 请求的系统错误 403(“禁止”)。任何浏览器都会发生这种情况(至少对于 Firefox、Chrome 和 IE/Edge)。当出现403错误时,触发上述代码示例的failure()函数。
我已经监控了与 Wireshark 的连接,我可以看到,尽管出现了 403 错误,但实际上 HTTP 服务器仍在接收请求并正在发送(正确的)答案。
看起来在浏览器中有一些计时器在加载主页(index.html)时启动,并在几分钟后到期,导致 fetch() API 失败并出现错误 403。
我需要定期 GET 可以无限期地工作,没有时间限制,因为它的目的是监控状态并从嵌入式系统中检索重要的诊断数据。 我该如何解决?
编辑: 首先;我必须更正这个帖子的文字和标题,因为“禁止”错误不是503,而是403。我为错误道歉。
其次,我添加了一些有用的信息。网络服务器在 Concerto F28M36x 处理器中的 RTOS 上运行。为了进行模拟测试和更容易调试,我使用 MSDN C++ HTTP API (https://docs.microsoft.com/en-us/windows/win32/http/http-server-api-overview) 修改了 webserver 的代码,使其在 Window 机器上运行。在这种情况下,HTTP 服务器在客户端 (localhost) 的同一台计算机上运行。尽管如此,行为(错误 403)与 Web 服务器在嵌入式系统中运行时的行为完全相同。当 GET 请求成功 (result=200) 时,浏览器检查器会显示以下内容:
GET http://localhost/readResults.cgi
Status 200 OK
Version HTTP/1.1
Transferred 308 B (174 B size)
Referrer Policy no-referrer-when-downgrade
Response header: (157 B)
Content-Length 174
Content-Type text/plain
Date Tue,06 Apr 2021 11:00:39 GMT
Server Microsoft-HTTPAPI/2.0
Request headers (421 B):
Accept */*
Accept-Encoding gzip,deflate
Accept-Language en-US,en;q=0.5
cache-control no-cache,must-revalidate,post-check=0,pre-check=0,max-age=0
Connection keep-alive
expires Tue,01 Jan 1980 1:00:00 GMT
Host localhost
pragma no-cache
Referer http://localhost/
Sec-GPC 1
User-Agent Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0
当结果为 403 时,浏览器检查器会显示:
GET http://localhost/readResults.cgi
Status 403 Forbidden
VersionHTTP/1.1
Transferred 4.11 KB (3.95 KB size)
Referrer Policy no-referrer-when-downgrade
Response header: (157 B)
Cache-Control no-cache
Connection close
Content-Length 4047
Content-Type text/html; charset=UTF-8
Proxy-Connection close
Request headers (421 B):
Accept */*
Accept-Encoding gzip,01 Jan 1980 1:00:00 GMT
Host localhost
pragma no-cache
Referer http://localhost/
Sec-GPC 1
User-Agent Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0
如您所见,对于“好”情况,在“坏”情况下,响应标头中存在以下附加字段:
Connection: close
Proxy-Connection: close
编辑 - 由于我没有收到任何答案,有人可以建议我一个可以发布此问题的其他论坛吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)