发帖请求的大小限制是多少?
Posted
技术标签:
【中文标题】发帖请求的大小限制是多少?【英文标题】:What is the size limit of a post request? 【发布时间】:2011-01-22 19:38:12 【问题描述】:很抱歉,如果这是重复的,我会认为它会是但找不到任何东西。
我有一个 flex 应用程序,我通过 IE 将数据发布回 php/mysql 服务器。我还没有遇到任何问题,但提前知道这一点可能会为我省去很多挫折和工作。通过 http 发布数据是否有大小限制?
这篇文章说不: http://www.netlobo.com/ie_form_submit.html
这个讨论说是的: http://bytes.com/topic/php/answers/538226-what-maximum-limit-using-post-method
这一切都在我能在网上找到的东西来回发生。所以请将答案限制在个人测试/验证的数字范围内。
我想发回一个很大的 XML 字符串(比如最大 5mb)。
如果有什么不同:浏览器总是 IE(我们的产品需要它),post 来自 flex 中的 httpService,Web 服务器是 php,DB 是 mySql。
【问题讨论】:
***.com/questions/2276759/… 我在 laravel 中遇到了这个问题并添加了 ini_set('max_input_vars', 2500);在我的项目根目录下的 server.php 中,它工作了***.com/a/63241730/308578 【参考方案1】:这取决于服务器配置。如果您在 Linux 或类似系统下使用 PHP,您可以使用 .htaccess 配置文件来控制它,如下所示:
#set max post size
php_value post_max_size 20M
而且,是的,我可以亲自证明这是可行的:)
如果您使用的是 IIS,我不知道您将如何设置此特定值。
【讨论】:
post_max_size
设置在哪里?我对 php 很陌生,在我们的代码库中的任何地方都找不到它(使用 dreamWeaver 查找所有过程)。我会问我们的系统管理员,但他们很刻薄。 :-P
那么你能把这个值设置成任何大小吗?没有任何协议限制吗?可以设置成999999999999999999999M吗?
@Para - This post 表示您可以将其设置为与机器内存一样高。它还说默认是 2MB。
因为这是 PHP,我有点期待它接受任何值,并且当它达到您机器的限制时只接受 SEGFAULT....
另外,在 PNP.INI 文件中有一个设置:max_input_vars,在我的 PHP 版本中:5.4.16 默认为 1000。从手册中:“可以接受多少个输入变量(限制为分别应用于 $_GET、$_POST 和 $_COOKIE 超全局)" Ref.: php.net/manual/en/info.configuration.php#ini.max-input-vars【参考方案2】:
请求的 url 部分(GET 和 POST)可以受到浏览器和服务器的限制 - 通常安全大小为 2KB,因为几乎没有浏览器或服务器使用更小的限制。
请求的正文(POST)通常*由服务器以字节大小为基础限制,以防止某种类型的 DoS 攻击(请注意,这意味着字符转义会增加正文的字节大小)。最常见的服务器设置是 10MB,尽管所有流行的服务器都允许通过设置文件或面板来增加或减少此设置。
*旧手机或其他小型设备浏览器存在一些例外情况 - 在这些情况下,它更多的是设备上为此目的保留的堆空间的功能,而不是其他任何东西。
【讨论】:
说说浏览器的限制,考虑到curl
我知道我在这里有点落伍了,但像这样的答案是我喜欢 *** 的原因。超出要求并提供一些有价值的背景信息。【参考方案3】:
另外,在 PHP.INI 文件中有一个设置:
max_input_vars
在我的 PHP 版本中:5.4.16 默认为 1000。
从手册: "可以接受多少个输入变量(限制分别应用于 $_GET、$_POST 和 $_COOKIE 超全局变量)"
参考:http://www.php.net/manual/en/info.configuration.php#ini.max-input-vars
【讨论】:
注意这个值是默认注释的,所以取消注释并更改所需的值。【参考方案4】:您可以通过设置 php.ini 变量来发布大量数据:max_input_vars
此变量的默认大小为 1000,但如果要发送大量数据,则必须相应地增加大小。
如果您无法从 ini_set 设置大小,则必须通过 htaccess
或直接更改 php.ini 文件来完成。
max_input_vars 2500
memory_limit 256M
【讨论】:
【参考方案5】:正如 David 指出的那样,在大多数情况下,我会选择 KB。
php_value post_max_size 2K
注意:我的表单很简单,就是几个文本框,不是长文本。
(KB 的 PHP 简写是 K,如 here 所述。)
【讨论】:
【参考方案6】:默认情况下,post 请求的最大大小为 8mb。但是您可以根据自己的要求进行修改。 修改可以通过打开 php.ini 文件(php 配置设置)来完成。
查找
post_max_size=8M //for me, that was on line:771
根据您的要求更换 8 个。
【讨论】:
【参考方案7】:最好的解决方案之一是不要使用多个或超过 1,000 个输入字段。您可以将多个输入与任何特殊字符连接起来,例如。 @
.
看这个:
<input type='text' name='hs1' id='hs1'>
<input type='text' name='hs2' id='hs2'>
<input type='text' name='hs3' id='hs3'>
<input type='text' name='hs4' id='hs4'>
<input type='text' name='hs5' id='hs5'>
<input type='hidden' name='hd' id='hd'>
使用任何脚本(javascript 或 JScript),
document.getElementById("hd").value = document.getElementById("hs1").value+"@"+document.getElementById("hs2").value+"@"+document.getElementById("hs3").value+"@"+document.getElementById("hs4").value+"@"+document.getElementById("hs5").value
这样,您将绕过max_input_vars
问题。如果在 php.ini 文件中增加max_input_vars
,这对服务器是有害的,因为它使用了更多的服务器缓存,这有时会导致服务器崩溃。
【讨论】:
我看不到连接变量如何节省内存。每个 ASCII 字符使用 1 个字节的内存。一个字符串(如果我没记错的话,技术上是一个 char 数组)使用 n * 1 个字节,其中 n 作为字符串长度。为什么添加另一个字符会减少使用的内存?在此计算中,您将为添加到字符串的每个“@”添加另一个字节。当然,您减少了使用的变量的数量,但是您付出了额外的工作来再次将它们分开。 @DBX12 虽然您不使用此技巧节省内存,但您可以使用此技巧绕过php.ini
中的max_input_vars
选项。不完全是,问了什么,但仍然有用。
大小限制超出取决于两个因素:首先,单个键/值字符串大小的大小,即键和/或值端的字符数。第二,键/值对的数量,即使每对的字符量很小。总体而言,上述两个因素最终导致尺寸限制超出问题。所以,对我来说,这个答案是正确的,并且与问题相关,并突出了问题的一方面。【参考方案8】:
由 http 服务器决定是否有限制。我工作的产品允许管理员配置限制。
【讨论】:
另外,在 PNP.INI 文件中有一个设置:max_input_vars,在我的 PHP 版本中:5.4.16 默认为 1000。从手册中:“可以接受多少个输入变量(限制为分别应用于 $_GET、$_POST 和 $_COOKIE 超全局)" Ref.: [php.net/manual/en/info.configuration.php#ini.max-input-vars][1] [1]: php.net/manual/en/info.configuration.php#ini.max-input-vars【参考方案9】:适用于因虚拟主机而无法更改 php 配置的开发人员。(我的设置最大大小为 256MB,最大变量为 1000 个)
我遇到了同样的问题,即在服务器端仅收到 5 个带有子结构的大数据对象(关联数组)中的 2 个。
我发现整个子结构在发布请求中被“扁平化”了。因此,一个对象变成了数百个字面变量。最后,实际上发送了几十个基本变量,而不是 5 个 Object 变量。
解决方案在这种情况下是将每个子结构序列化为字符串。然后它作为 5 个字符串变量在服务器上接收。
例子:
variable1:JSON.stringify(myDataObject1),variable2:JSON.stringify(myDataObject2)...
【讨论】:
以上是关于发帖请求的大小限制是多少?的主要内容,如果未能解决你的问题,请参考以下文章