Qual é o limite de tamanho de uma solicitação de postagem?

268

Desculpe se isso é duplicado, eu acho que seria, mas não consegui encontrar nada.

Eu tenho um aplicativo flex que estou postando dados de volta para um servidor php / mysql via IE. Ainda não enfrentei nenhum problema, mas saber disso com antecedência pode me poupar um monte de frustração e trabalho. Existe um limite de tamanho para postar dados via http?

Este artigo diz não: http://www.netlobo.com/ie_form_submit.html

Esta discussão diz que sim: http://bytes.com/topic/php/answers/538226-what-maximum-limit-using-post-method

E tudo vai e volta do que eu posso encontrar online. Portanto , limite as respostas aos números testados / verificados pessoalmente.

Estou querendo postar de volta uma seqüência XML que pode ser bastante grande (digamos, até 5mb).

Se isso faz alguma diferença: o navegador sempre será o IE (nosso produto exige), a publicação vem e o httpService no flex, o servidor web é php, o DB é mySql.

invertedSpear
fonte

Respostas:

203

Depende da configuração do servidor. Se você estiver trabalhando com PHP no Linux ou similar, poderá controlá-lo usando o arquivo de configuração .htaccess, da seguinte maneira:

#set max post size
php_value post_max_size 20M

E, sim, posso atestar pessoalmente que isso funciona :)

Se você estiver usando o IIS, não faço ideia de como você definiria esse valor específico.

inkedmn
fonte
3
Onde está essa post_max_sizeconfiguração? Sou um pouco iniciante no php e não consigo encontrá-lo em nenhum lugar da nossa base de código (usando o processo find-all do dreamWeaver). Eu pediria aos administradores do nosso sistema, mas eles são maus. :-P
invertedSpear
10
Então você pode simplesmente definir esse valor para qualquer tamanho? Não há nenhum tipo de limitação de protocolo? Você pode configurá-lo para 999999999999999999999M?
Par
8
@Para - Este post diz que você pode configurá-lo tão alto quanto a memória da sua máquina. Ele também diz que o padrão é 2MB.
RustyTheBoyRobot
37
Uma vez que este é PHP, eu estava meio que esperando que ele aceite qualquer valor e apenas segfault quando atinge o limite de sua máquina ....
RustyTheBoyRobot
12
Além disso, no arquivo PNP.INI, existe uma configuração: max_input_vars, que na minha versão do PHP: 5.4.16 é padronizada como 1000. No manual: "Quantas variáveis ​​de entrada podem ser aceitas (o limite é aplicado a $ _GET, $ _POST e $ _COOKIE superglobal separadamente) "Ref .: php.net/manual/en/info.configuration.php#ini.max-input-vars
Nikolay Ivanov
73

A parte da URL de uma solicitação (GET e POST) pode ser limitada pelo navegador e pelo servidor - geralmente o tamanho seguro é de 2 KB, pois quase não há navegadores ou servidores que usem um limite menor.

O corpo de uma solicitação (POST) é normalmente * limitado pelo servidor com base no tamanho de bytes, a fim de evitar um tipo de ataque de DoS (observe que isso significa que o escape de caracteres pode aumentar o tamanho de bytes do corpo). A configuração mais comum do servidor é 10 MB, embora todos os servidores populares permitam aumentar ou diminuir esse valor por meio de um arquivo ou painel de configuração.

* Existem algumas exceções em celulares mais antigos ou em outros navegadores de dispositivos pequenos - nesses casos, é mais uma função do espaço de pilha reservado para essa finalidade no dispositivo do que qualquer outra coisa.

David
fonte
2
Diga algo sobre os limites do navegador, considerandocurl
Yugal Jindle
12
Eu sei que estou um pouco atrasado aqui, mas respostas como essas são a razão pela qual eu amo o StackOverflow. Acima e além do necessário e fornecendo algumas informações valiosas.
Dormouse
50

Além disso, no arquivo PHP.INI, há uma configuração:

max_input_vars

que na minha versão do PHP: 5.4.16 o padrão é 1000.

No manual: "Quantas variáveis ​​de entrada podem ser aceitas (o limite é aplicado a superglobal $ _GET, $ _POST e $ _COOKIE separadamente)"

Ref .: http://www.php.net/manual/en/info.configuration.php#ini.max-input-vars

Nikolay Ivanov
fonte
14

Você pode postar uma grande quantidade de dados configurando a variável php.ini: max_input_vars O tamanho padrão dessa variável é 1000, mas se você quiser enviar uma grande quantidade de dados, precisará aumentar o tamanho de acordo. Se você não pode definir o tamanho do ini_set, deve fazê-lo completamente htaccessou fazendo alterações diretamente no arquivo php.ini.

max_input_vars  2500
memory_limit    256M
Nilesh Chourasia
fonte
5

Como David apontou, eu usaria o KB na maioria dos casos.

php_value post_max_size 2KB

Nota: meu formulário é simples, apenas algumas caixas de texto, não texto longo.

ChrisDeDavidMindflowAU
fonte
2

Por padrão, a solicitação de postagem tem tamanho máximo de 8 MB. Mas você pode modificá-lo de acordo com seus requisitos. A modificação pode ser feita abrindo o arquivo php.ini (configuração php).

Encontrar

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

substitua 8 de acordo com suas necessidades.

Muhammad Ashfaq
fonte
1

Cabe ao servidor http decidir se existe um limite. O produto em que trabalho permite que o administrador configure o limite.

ChrisH
fonte
Além disso, no arquivo PNP.INI, existe uma configuração: max_input_vars, que na minha versão do PHP: 5.4.16 é padronizada como 1000. No manual: "Quantas variáveis ​​de entrada podem ser aceitas (o limite é aplicado a $ _GET, $ _POST e $ _COOKIE superglobal separadamente) "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
Nikolay Ivanov
1

Uma das melhores soluções para isso, você não usa vários ou mais de 1.000 campos de entrada. Você pode concatenar várias entradas com qualquer caractere especial, por exemplo. @.

Veja isso:

<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'>

Usando qualquer script (JavaScript ou 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

Com isso, você ignorará o max_input_varsproblema. Se você aumentar max_input_varso arquivo php.ini, isso é prejudicial ao servidor porque ele usa mais memória cache do servidor e, às vezes, pode travar o servidor.

harpej
fonte
1
Não vejo como concatenar variáveis ​​economiza memória. Cada caractere ASCII usa 1 byte de memória. Uma string (tecnicamente uma matriz de caracteres, se não me engano) usa n * 1 bytes com n como comprimento da string. Por que adicionar outro caractere reduziria a memória usada? Nesse cálculo, você adicionaria outro byte para cada '@' adicionado à string. É claro que você reduz a contagem de variáveis ​​usadas, mas paga essa "vitória" com um trabalho extra dividindo-as novamente.
DBX12
2
@ DBX12 Embora não poupe memória com este truque, pode ignorar a max_input_varsopção no modo php.inicom isto. Não exatamente, o que foi solicitado, mas ainda útil.
precisa saber é o seguinte
O limite de tamanho excedido depende de dois fatores: primeiro, tamanho do tamanho da chave / valor individual da cadeia, ou seja, contagem de caracteres no lado da chave e / ou valor. segundo, quantidade de pares chave / valor, mesmo que cada par tenha uma quantidade pequena de caracteres. No geral, dois fatores acima acabam com o tamanho excedido do limite. Então, para mim, essa resposta está correta e relacionada à pergunta e destaca um lado de um problema.
Elnur Shabanov 17/04
0

Para desenvolvedores que não podem alterar a configuração do php por causa da hospedagem na web. (Minhas configurações, tamanho máximo de 256 MB, 1000 variáveis ​​máximas)

Eu tive o mesmo problema: apenas 2 dos 5 objetos de big data (matrizes associativas) com subestruturas foram recebidos no lado do servidor.

Descobri que toda a subestrutura está sendo "achatada" na solicitação de postagem. Portanto, um objeto se torna centenas de variáveis ​​literais. No final, em vez de 5 variáveis ​​de objeto, na verdade, ele está enviando dezenas de centenas de variáveis ​​elementares.

A solução nesse caso é serializar cada uma das subestruturas em String. Em seguida, é recebido no servidor como 5 variáveis ​​de String. Exemplo: {variable1:JSON.stringify(myDataObject1),variable2:JSON.stringify(myDataObject2)...}

Mira Nedved
fonte