许多文件请求出现 403 错误(禁止)

许多文件请求出现 403 错误(禁止)

我正在编写一个显示 svg 图像的网页。java 脚本应该通过添加标签来加载此 svg 中的许多小缩略图(大约 400 个)<image>。正如浏览器调试输出所示,并非所有这些缩略图都已加载。许多都失败并出现“错误 403”。

缩略图文件的权限正确。我可以用浏览器单独加载它们。这个问题似乎在多个浏览器中都一致出现。

我怀疑我同时发送了太多文件请求。我可能无法直接访问服务器,但很可能是 Linux 上的 apache2。是否有控制每个客户端最大文件数的参数或硬编码限制(例如,有一个名为的参数MaxKeepAliveRequests)或是否有任何其他问题可能导致此行为?

有没有办法找到运行服务器的实际计算机的 IP(当然我找到了 URL 转换成的 IP,但据我所知,这台计算机并没有运行实际的服务器。端口可能被转发了)?

尽管这可能与主题无关:是否有推荐的 Java 脚本解决方案来解决加载许多文件时出现的此类问题?


我找到了一些可能相关的 Apache 配置。它似乎加载了mod_evasive。可能是这个吗?

相关配置是

<IfModule mod_evasive20.c>
    DOSHashTableSize    3097
    DOSPageCount        10
    DOSSiteCount        50
    DOSPageInterval     1
    DOSSiteInterval     3
    DOSBlockingPeriod   20
    DOSEmailNotify      ""
    DOSLogDir           "/var/log/apache2/mod_evasive.log"
</IfModule>

答案1

这听起来像是一种速率限制。有几个 Apache 模块可以做到这一点,mod_qos这就是其中之一。通常它们除了403 forbidden返回代码外,还会返回简短的正文,其中包含一些详细信息,例如链接到可接受使用政策或类似内容。看看您的抓取脚本是否能显示除 403 错误代码之外的内容。在 apache 进行限制之前,还可能存在反向代理。

解决方案是,保持对同一站点的并发请求数量较低(如果不是 1)。并遵守robots.txt!还请记下目标站点服务条款可接受使用政策

更新是的,mod_evasive也会这样做。您可以禁用它(如果您可以控制站点)或调整其参数。具体来说,在您的案例中,如果您DOSSiteCountDOSSiteInterval时间内执行的请求数超过请求数,它将被阻止。因此,您需要增加允许的请求数或限制您的获取速度(通过限制下载并行性和/或在每个请求后插入延迟)

答案2

是的,evasive可以这样做。要验证这一点,只需在 Apache 的错误日志文件中查找evasive,您就会得到所需的所有信息。

相关内容