tag name link body attribute html http cross-browser cgi mime-types

html - name - Formulario de carga multiparte: ¿Se garantiza el pedido?



meta name html (1)

Sí:

Las partes se envían al agente de procesamiento en el mismo orden en que aparecen los controles correspondientes en la secuencia del documento. Los límites de las partes no deben aparecer 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

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 HTML. En la práctica, ¿todos los navegadores hacen esto?

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 necesidad de almacenar en caché toda la solicitud HTTP en la RAM | disco primero

Sé que CGI, PHP, etc. normalmente no harán nada hasta que se complete la carga. Probablemente porque la sección 5.5 de RFC 2388 aborda este problema diciendo que el orden no está definido. Estoy trabajando con una bifurcación altamente personalizada de thttpd y manejando la carga con el código C integrado en el servidor. Así que no me importa lo que haga la mayoría de los servidores.

Lo que quiero saber es si me arriesgo y asumo una orden, ¿me voy a quemar con esa suposición?

Toma 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 ()'' completará los campos de usuario y destino antes de invocar submit (). Me gustaría validar también el lado del servidor de usuario y destino, antes de recv() el cuerpo de solicitud HTTP completo.