¿Cuál es el límite de tamaño de una solicitud de publicación?

268

Lo siento si esto es duplicado, creo que lo sería, pero no pude encontrar nada.

Tengo una aplicación flexible en la que publico datos en un servidor php / mysql a través de IE. Todavía no me he encontrado con ningún problema, pero saber esto de antemano podría ahorrarme mucha frustración y trabajo. ¿Existe un límite de tamaño para publicar datos a través de http?

Este artículo dice que no: http://www.netlobo.com/ie_form_submit.html

Esta discusión dice que sí: http://bytes.com/topic/php/answers/538226-what-maximum-limit-using-post-method

Y todo va y viene lo que puedo encontrar en línea. Por lo tanto , limite las respuestas a números probados / verificados personalmente.

Quiero publicar una cadena XML que puede ser bastante grande (digamos hasta 5 mb).

Si hace alguna diferencia: el navegador siempre será IE (nuestro producto lo requiere), la publicación proviene y httpService en flex, el servidor web es php, DB es mySql.

Lanza invertida
fuente

Respuestas:

203

Depende de la configuración del servidor. Si está trabajando con PHP en Linux o similar, puede controlarlo usando el archivo de configuración .htaccess, de esta manera:

#set max post size
php_value post_max_size 20M

Y sí, puedo dar fe personalmente del hecho de que esto funciona :)

Si está utilizando IIS, no tengo idea de cómo establecería este valor en particular.

entintado
fuente
3
¿Dónde está esta post_max_sizeconfiguración? Soy bastante nuevo en php y no puedo encontrarlo en ninguna parte de nuestra base de código (usando el proceso de búsqueda de dreamWeaver). Preguntaría a nuestros administradores de sistemas pero son malos. :-P
invertedSpear
10
Entonces, ¿puede establecer este valor en cualquier tamaño? ¿No hay algún tipo de limitación de protocolo? ¿Puedes configurarlo en 999999999999999999999M?
Para el
8
@Para: esta publicación dice que puede configurarlo tan alto como la memoria de su máquina. También dice que el valor predeterminado es 2 MB.
RustyTheBoyRobot
37
Como se trata de PHP, esperaba que aceptara cualquier valor y solo SEGFAULT cuando alcanzara el límite de su máquina ...
RustyTheBoyRobot
12
Además, en el archivo PNP.INI hay una configuración: max_input_vars que en mi versión de PHP: 5.4.16 tiene como valor predeterminado 1000. Del manual: "Cuántas variables de entrada pueden aceptarse (el límite se aplica a $ _GET, $ _POST y $ _COOKIE superglobal por separado) "Ref .: php.net/manual/en/info.configuration.php#ini.max-input-vars
Nikolay Ivanov
73

La porción de URL de una solicitud (GET y POST) puede estar limitada tanto por el navegador como por el servidor; en general, el tamaño seguro es de 2 KB, ya que casi no hay navegadores o servidores que usen un límite menor.

El cuerpo de una solicitud (POST) normalmente * está limitado por el servidor en función del tamaño del byte para evitar un tipo de ataque DoS (tenga en cuenta que esto significa que el escape de caracteres puede aumentar el tamaño del byte del cuerpo). La configuración del servidor más común es de 10 MB, aunque todos los servidores populares permiten aumentar o disminuir esto a través de un archivo o panel de configuración.

* Existen algunas excepciones con teléfonos celulares más antiguos u otros navegadores de dispositivos pequeños; en esos casos, es más una función del espacio de almacenamiento dinámico reservado para este propósito en el dispositivo que cualquier otra cosa.

David
fuente
2
curl
Tenga en
12
Sé que estoy un poco atrasado con los tiempos aquí, pero respuestas como estas son la razón por la que amo StackOverflow. Más allá de lo que se requiere y brinda información valiosa de antecedentes.
Dormouse
14

Puede publicar una gran cantidad de datos configurando la variable php.ini: el max_input_vars tamaño predeterminado de esta variable es 1000, pero si desea enviar una gran cantidad de datos, debe aumentar el tamaño en consecuencia. Si no puede establecer el tamaño desde ini_set, debe hacerlo htaccesso haciendo cambios directamente en el archivo php.ini.

max_input_vars  2500
memory_limit    256M
Nilesh Chourasia
fuente
5

Como señaló David, iría con KB en la mayoría de los casos.

php_value post_max_size 2KB

Nota: mi formulario es simple, solo unos pocos cuadros de texto, no texto largo.

ChrisDeDavidMindflowAU
fuente
2

De forma predeterminada, la solicitud de publicación tiene un tamaño máximo de 8 mb. Pero puede modificarlo según sus requisitos. La modificación se puede hacer abriendo el archivo php.ini (configuración de configuración de php).

Encontrar

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

reemplace 8 de acuerdo a sus requerimientos.

Muhammad Ashfaq
fuente
1

Depende del servidor http decidir si hay un límite. El producto en el que trabajo permite al administrador configurar el límite.

ChrisH
fuente
Además, en el archivo PNP.INI hay una configuración: max_input_vars que en mi versión de PHP: 5.4.16 tiene como valor predeterminado 1000. Del manual: "Cuántas variables de entrada pueden aceptarse (el límite se aplica a $ _GET, $ _POST y $ _COOKIE superglobal por separado) "Ref .: [ php.net/manual/en/info.configuration.php#ini.max-input-varsfont>[1] [1]: php.net/manual/en/info.configuration .php # ini.max-input-vars
Nikolay Ivanov
1

Una de las mejores soluciones para esto, no utiliza múltiples o más de 1,000 campos de entrada. Puede concatenar múltiples entradas con cualquier carácter especial, por ej. @.

Mira esto:

<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 cualquier script (JavaScript o 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

Con esto, evitarás el max_input_varsproblema. Si aumenta max_input_varsel archivo php.ini, eso es perjudicial para el servidor porque usa más memoria caché del servidor, y esto a veces puede bloquear el servidor.

harpej
fuente
1
No veo cómo la concatenación de variables ahorra memoria. Cada carácter ASCII usa 1 byte de memoria. Una cadena (técnicamente una matriz de caracteres si no me equivoco) usa n * 1 bytes con n como longitud de cadena. ¿Por qué agregar otro personaje reduciría la memoria utilizada? En este cálculo, agregaría otro byte por cada '@' que agregue a la cadena. Por supuesto, usted reduce el recuento de variables utilizadas, pero paga este "premio" con un trabajo adicional que las divide nuevamente.
DBX12
2
@ DBX12 Si bien no guardas memoria con este truco, puedes omitir la max_input_varsopción php.inicon esto. No exactamente, lo que se preguntó, pero sigue siendo útil.
RicoBrassers
El límite de tamaño excedido depende de dos factores: primero, el tamaño de la cadena de clave / valor individual, es decir, el recuento de caracteres en la clave y / o el lado del valor. segundo, la cantidad de pares clave / valor, incluso si cada par tiene una pequeña cantidad de caracteres. En general, los dos factores anteriores terminan con un límite de tamaño que excede el problema. Entonces, para mí, esta respuesta es correcta y está relacionada con la pregunta y resalta un lado del problema.
Elnur Shabanov
0

Para desarrolladores que no pueden cambiar la configuración de php debido al alojamiento web. (Mi configuración 256 MB de tamaño máximo, 1000 variables máximas)

Tuve el mismo problema de que solo 2 de cada 5 objetos de big data (matrices asociativas) con subestructuras se recibieron en el lado del servidor.

Descubrí que toda la subestructura se está "aplanada" en la solicitud posterior. Entonces, un objeto se convierte en cientos de variables literales. Al final, en lugar de 5 variables de objeto, en realidad está enviando docenas de cientos de variables elementarias.

La solución en este caso es serializar cada una de las subestructuras en String. Luego se recibe en el servidor como 5 variables de cadena. Ejemplo: {variable1:JSON.stringify(myDataObject1),variable2:JSON.stringify(myDataObject2)...}

Mira Nedved
fuente