Javascript:加载页面几分钟后,HTTP GET 请求中出现错误 403

问题描述

我开发了一个 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 (将#修改为@)