基本上,我试图向我的网站发送一个 2GB 的 HTTP POST 数据包来测试它,因为 HTTP GET 不能达到那么高。但是,我对此不是很有经验,需要关于如何实际尝试的建议/解释。先感谢您。
2 回答
尝试执行此操作时会出现许多问题。我将尝试简要介绍它们-
1) 服务器设置 - 出于安全原因,许多服务器默认会阻止 2GB POST(具有无限或高的帖子最大值将使 DoS 更容易)。PHP 的默认值为 20M。
1-a) 服务器设置 - 许多服务器也有超时设置,如果请求在一定时间内未完成,它将放弃该请求。2GB 很可能会触发此设置。
2) 浏览器设置 - 我对此并不肯定,但您的浏览器也可能会尝试阻止这种情况。
3) 硬件 - 会有多个硬件瓶颈可能导致问题。物理内存(服务器和客户端)、网络带宽、可用的 HDD 空间(服务器上的写入权限,取决于您对 post 所做的操作)。
4) 3rd Party Host - 如果您的网站由第三方托管,他们可能已经实施了安全措施来阻止这种情况。
这可能不是一个完整的列表 - 但一个 2GB 的 post 文件可能会在传输过程中的许多不同阶段遇到问题。
如果您想要一种发送方式 - 这是一种方式
<html>
<body>
<form method="post">
<input type="hidden"
<?php
echo " value='";
for($i=0;$i<2147483648;$i++)
{
echo "a";
}
echo "'";
?>
>
<input type="submit">
</form>
<?php if(isset($_POST['test'])){
echo $_POST['test'];
}
?>
</body>
</html>
虽然,我真的不推荐使用这种方式。我还没有测试它,因为我现在不想破坏我的网络服务器。我的数学可能有点偏离 - 但假设 1 个字符是 1 个字节(基本 ascii)。如果页面完全加载,这将起作用。
由于使用 HTTP 请求将 2GB 从 A 点传输到 B 点似乎不合适(在您的情况下也是如此?),您可能希望在某个时候查看 FTP/Javascript,以便传输数据的任务在背景并且不会冻结您的浏览器,也不会冻结服务器。
假设:
您的服务器可以通过 FTP 处理文件传输
您的 2GB 数据存储在客户端的某个位置,而不是动态生成的。
有一些 JavaScript 库,您可以使用 FTP 管理文件传输(连接和实际传输)
使用上述库和一些 AJAX,您还需要将您的 http POST 请求生命周期与文件传输的状态同步。然后,在请求中,您可以坚持只提交有关您正在上传的 2GB 的信息。
我已经搜索过类似“ftp javascript 客户端”的内容,并且只列出了商业浏览器嵌入式 FTP 客户端。(如果我说废话,请随时纠正我)。