使用tomcat后面的apache&和Java web应用程序中的重复HTTP请求代理 - Ajax / Javascript

时间:2017-03-31 15:34:56

标签: javascript java ajax apache tomcat

环境

我们有一个基于Java的Web应用程序,在企业环境中运行,用户在代理后面。 Web应用程序在同一台服务器上安装了tomcat,其中apache Web服务器位于前端。另请注意,我们限制了对整体环境的访问,因此解决方案是在猜测工作中实施的。但是我们可以访问应用服务器。

背景

我们在应用程序中有一个网页,允许用户上传文件,处理文件并创建日志文件。这些文件需要一些时间来处理,有时甚至高达10-20分钟。创建的日志文件的名称附加了时间戳。每次加载网页时都会生成此日志文件的时间戳。日志文件名也显示在网页上的文本框字段中,并显示其当前值(例如log_2017-02-19 01.18.24.html)。因此,用户始终可以看到它。

初始问题

我们遇到的最初问题是生成了重复请求,因此用户提交的同一文件被多次处理。用户确认他们没有多次提交相同的请求。

已实施的解决方案

  • 我们首先实现了一个基于ajax / javascript的解决方案,以便在提交文件时删除回发/页面刷新。我们还在提交文件时使用javascript隐藏提交按钮,以确保用户不会错误地重新提交请求。 ajax / js解决方案使用POST方法,并在收到服务器的响应后,在29秒的间隔后重新加载页面。

  • 查看应用程序http日志,我们发现创建的日志文件与重复请求具有完全相同的时间戳值。然后我们认为是代理人在没有用户知道的情况下发送重复请求,假设上游服务器超时。我们保留了基于ajax的解决方案,但现在引入了一个tomcat过滤器来拦截post请求。我们查找传入的日志文件名请求参数,并在发现重复的情况下阻止它。这阻止了代理生成的重复项。

当前问题

现在我们遇到了相同的重复文件处理问题,但这次生成的日志文件没有完全相同的时间戳。以下是一个场景。

  • 在11:08:14:用户加载网页上传文件。显示的潜在日志文件名为log_2017-03-29 11.08.14
  • 在11:08:28:用户提交文件进行处理,创建日志文件log_2017-03-29 11.08.14.html。
  • 在11:08:57:用户提交文件后29秒后页面重新加载(根据基于Ajax / js的解决方案)
  • 在11:11:56:以某种方式生成重复请求,并创建日志文件log_2017-03-29 11.08.57.html。
  • 在11:12:25:页面然后使用javascript在29中重新加载。

用户再次确认他们没有提交重复请求。 Web应用程序中是否有人观察到此行为?即使在页面重新加载后,它是否可以自动触发ajax或javascript?或者也许提交按钮的onclick处理程序会自动启动?

请问?

0 个答案:

没有答案