gpt4 book ai didi

java - 防止对 java servlet 的重复请求

转载 作者:可可西里 更新时间:2023-11-01 15:27:10 26 4
gpt4 key购买 nike

我有一个 java serlvet,它访问 hadoop 集群并从 hadoop 集群发送一些数据的可下载 csv 作为响应。

我的问题是,这个 servlet 似乎有多个 GET 请求(据我所知,这是针对 chrome + 其他浏览器的),这导致多个连接打开到我的 Hadoop 集群。我不想一次有多个请求。有没有办法拒绝来自同一来源的多个请求,只响应第一个请求?

最佳答案

我不清楚您声称该行为是故意的依据是什么。您在评论中引用的另一个 SO 问题只是提出了相同的主张,而没有引用任何来源。然而,最后,这可能并不重要:如果该行为很常见,而不是与您可以修复的少量特定错误实例相关联,那么您可能需要无论如何都要处理它。

话虽如此,原则上,GET 请求不应该更改服务器的状态(因此它们应该是幂等的)。这可以被视为各种有趣和烦人的行为的理由。但是,由于没有理由类似地发出重复或抢先的 POST 请求,我希望您可以通过禁用相关资源的 GET 方法并强制客户端改为对其发出 POST 请求来解决问题。我认为客户不会发出重复的请求,除非用户明确指示(例如,通过双击链接/按钮)。

另一方面,假设您的网络应用程序正在执行 session 跟踪——在大多数 servlet 容器中默认启用——您可以检测到多个并发请求并处理它们。具体来说,您可以在开始处理此类请求时设置 session 属性,在完成时清除它,并让 servlet 测试该属性以确定如何处理每个请求。

我在评论中建议您可以为重复的请求返回一个错误代码,您确实可以,但这种行为可能会让客户感到惊讶,因为他们可能期望 GET 请求是幂等的。作为替代方案,您可以考虑推迟对重复请求的服务,直到计算完成,然后根据相同的计算结果为所有请求提供相同的响应。

然而,据我所知,您不能简单地删除重复的请求。 Servlet API 中的任何地方都没有这样做的机制。

关于java - 防止对 java servlet 的重复请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42913442/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com