Navigator.sendBeacon() 发送 ping 和 403 未知错误

问题描述 投票:0回答:1

在我的 Java 应用程序中,一个 jsp 正在调用另一个 jsp,如下所示,

\\ below function is inside abc.jsp
function sessionMark() {
  navigator.sendBeacon('logger.jsp');
  setTimeout(sessionMark, 2 * 60 * 1000 );
}

此外,abc.jsp 页面上的其他 jsp 调用都正常工作,并且它们正在使用 ajax,如下所示。

$.ajax({
  url: "VO.jsp",
  type: 'POST',
  data: {scripts:scripts,on: 'true',tb:'yes',},
  success: function(data) {
    //do something
  }
});

logger.jsp 给出 403 未知错误。

编辑:

我发现Tomcat web.xml上应用了CorsFilter,如下所示。

 <filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>  

其他详细信息:

我在 HTTPD 服务器上有 ldap 验证,并且该应用程序驻留在 tomcat(反向代理)中。

当 CorsFilter 被删除时,API 可以工作,当它打开时,API 会失败。

有人可以解释为什么 jsp 调用没有经历这个吗?

javascript ajax cors tomcat9 sendbeacon
1个回答
0
投票

最终发现,该问题是由于 CorsFilter 检查 header Content-Type 引起的。如果直接调用sendBeacon方法则不会设置。

我使用了下面的代码,它将自行设置标题。

var params = new URLSearchParams({ some_value : 1 })
navigator.sendBeacon('logger.jsp',params);
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.