发布请求的大小限制是多少?


268

对不起,如果这是重复的话,我想是可以的,但是找不到任何东西。

我有一个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。


Answers:


203

这取决于服务器配置。如果您在Linux或类似操作系统下使用PHP,则可以使用.htaccess配置文件对其进行控制,如下所示:

#set max post size
php_value post_max_size 20M

而且,是的,我可以亲自证明这一点是可行的:)

如果您使用的是IIS,我不知道如何设置此特定值。


3
post_max_size设置在哪里?我对php很陌生,在代码库的任何地方都找不到(使用dreamWeaver查找所有过程)。我会问我们的系统管理员,但是他们很刻薄。:-P

10
那么您可以将此值设置为任何大小吗?没有任何协议限制吗?可以将其设置为999999999999999999999M吗?
2012年

8
@Para- 这篇文章说,您可以将其设置为与机器内存一样高。它还说默认值是2MB。
RustyTheBoyRobot 2012年

37
由于这是PHP,因此我希望它能够接受任何值,并且在达到计算机的极限时只能接受SEGFAULT...。
RustyTheBoyRobot

12
另外,在PNP.INI文件中有一个设置:max_input_vars,在我的PHP版本:5.4.16中,默认设置为1000。从手册中可以得出:“可以接受多少个输入变量(限制应用于$ _GET,$ _ POST和$ _COOKIE superglobal分别)”。参考:php.net/manual/en/info.configuration.php#ini.max-input-vars
Nikolay Ivanov

73

请求的url部分(GET和POST)可以同时受浏览器和服务器的限制-通常安全大小为2KB,因为几乎没有浏览器或服务器使用较小的限制。

服务器通常以字节大小为基础限制请求(POST)的主体*,以防止DoS攻击类型(请注意,这意味着字符转义可以增加主体的字节大小)。最常见的服务器设置是10MB,尽管所有流行的服务器都允许通过设置文件或面板来增加或减少该设置。

*较旧的手机或其他小型设备浏览器存在某些例外情况-在这些情况下,它是为此目的在设备上保留的堆空间的函数,而不是其他任何东西。


2
告诉一些有关浏览器限制的信息,请考虑curl
Yugal Jindle 2012年

12
我知道我在这里有点落后,但是像这样的回答是我喜欢StackOverflow的原因。超出了要求,并提供了一些有价值的背景信息。
睡鼠


14

您可以通过设置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 2KB

注意:我的表单很简单,只有几个文本框,而不是长文本。


2

默认情况下,发布请求的最大大小为8mb。但是您可以根据需要对其进行修改。可以通过打开php.ini文件(php配置设置)来完成修改。

post_max_size=8M  //for me, that was on line:771

根据您的要求替换8。


1

由http服务器决定是否存在限制。我使用的产品允许管理员配置限制。


另外,在PNP.INI文件中有一个设置:max_input_vars,在我的PHP版本:5.4.16中,默认设置为1000。从手册中可以得出:“可以接受多少个输入变量(限制应用于$ _GET,$ _ POST和$ _COOKIE分别为superglobal)”“参考:[ php.net/manual/en/info.configuration.php#ini.max-input-vars] [1] [1]:php.net/manual/en/info.configuration .php#ini.max-input-vars
Nikolay Ivanov

1

最好的解决方案之一,您不要使用多个或超过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问题。如果增加max_input_varsphp.ini文件,则对服务器有害,因为它使用了更多的服务器缓存,有时可能会使服务器崩溃。


1
我看不到串联变量如何节省内存。每个ASCII字符使用1个字节的内存。字符串(如果没有记错的话,从技术上讲是一个char数组)使用n * 1个字节,其中n为字符串长度。为什么添加另一个字符会减少使用的内存?在此计算中,您将为添加到字符串中的每个“ @”添加另一个字节。当然,您可以减少使用的变量数量,但是您需要付出额外的努力才能再次获得收益,从而付出了“胜利”。
DBX12

2
@ DBX12虽然您不能使用此技巧来节省内存,但是可以使用此方法绕过中的max_input_vars选项php.ini。不完全是,询问的内容,但仍然有用。
RicoBrassers

超出大小限制取决于两个因素:首先,单个键/值字符串大小的大小,即键和/或值侧的字符数。第二,键/值对的数量,即使每对键/值的字符量很小。总体上,上述两个因素最终导致大小限制超出问题。因此,对我来说,这个答案是正确的,并且与问题相关,并突出了问题的一个方面。
Elnur Shabanov

0

对于由于网络托管而无法更改php配置的开发人员。(我的设置为256MB最大大小,1000个最大变量)

我遇到了同样的问题,即在服务器端仅收到5个具有子结构的大数据对象(关联数组)中的2个。

我发现整个子结构在发布请求中被“扁平化”。因此,一个对象变成了数百个文字变量。最后,实际上不是发送5个Object变量,而是发送了数百个基本变量。

这种情况下的解决方案是将每个子结构序列化为String。然后,它在服务器上作为5个String变量接收。例: {variable1:JSON.stringify(myDataObject1),variable2:JSON.stringify(myDataObject2)...}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.