2011-09-16 9 views
16

Parece que cuando uso un formulario html para realizar una solicitud POST "Content-Type: multipart/form-data", los campos siempre aparecen en el orden en que aparecen en el código HTML. En la práctica, ¿todos los navegadores hacen esto?Formulario de carga de varias partes: ¿Se garantiza el pedido?

La motivación principal para querer saber esto es que puedo hacer la validación del lado del servidor de los datos del formulario sin que sea necesario almacenar en caché la solicitud entera HTTP en RAM | disco primero

Sé que CGI, PHP, etc. normalmente no harán nada hasta que la carga se complete. Probablemente porque RFC 2388 sección 5.5 aborda este problema diciendo que el orden no está definido. Estoy trabajando con un fork muy personalizado de thttpd y manejo el código de carga w/C integrado en el servidor. Entonces no me importa lo que hagan la mayoría de los servidores.

Lo que quiero saber es si me arriesgaré y asumiré un pedido, ¿me quemaré con esa suposición?

tomar esta forma, por ejemplo:

<form id="formUpload" 
     target = "uploadTarget" 
     method = "post" 
     action = "/bin/upload" 
     enctype= "multipart/form-data" > 
    <input type="hidden" id="inUser" name="user" /> 
    <input type="hidden" id="inDest" name="dest"/> 
    <input type="file" id="inFile" name="file" /> 
    <input type="button" value="Upload" onclick="uploadFile();" /> 
    <iframe id="uploadTarget" name="uploadTarget" src="" style="width:0;height:0;border:0px"/> 
    </form> 

La función 'uploadfile()' llenará los campos dest usuario & antes de invocar a presentar(). Me gustaría validar también el usuario & del lado del servidor de destino, antes de recv(), es decir, todo el cuerpo de la solicitud HTTP.

+1

Para aquellos que se preguntan acerca de 'FormData()', también parecen ser enviados en orden. [Spec.] (Https://xhr.spec.whatwg.org/#interface-formdata) – 0xcaff

Respuesta

20

Sí:

Las partes se envían al agente de procesamiento en el mismo orden los controles correspondientes aparecen en la corriente de documento. Los límites de parte no deberían ocurrir en ninguno de los datos; cómo se hace esto queda fuera del alcance de esta especificación.

http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4

+2

¡Gracias por la gran respuesta! No sé por qué no pensé en verificar las especificaciones de HTML. Por cierto, mientras probaba diferentes navegadores, descubrí que incluso IE6 era compatible ... lo que pensé significaba que mi suposición era segura, pero me siento mucho mejor al tener una especificación para hacer referencia. –

Cuestiones relacionadas