Tuesday 31 October 2017

Content Type Http Binary Option


En HTTP hay dos formas de datos POST: application / x-www-form-urlencoded y multipart / form-data. Entiendo que la mayoría de los navegadores sólo pueden cargar archivos si se utilizan datos multipart / form. ¿Hay alguna guía adicional cuando se utiliza uno de los tipos de codificación en un contexto de API (sin navegador implicado) Esto puede ser, p. Basarse en: la existencia de datos de existencia de caracteres no-ASCII existencia en datos binarios (no codificados) la necesidad de transferir datos adicionales (como nombre de archivo) básicamente no encontré orientación formal en la web con respecto al uso de los diferentes tipos de contenido hasta el momento. La moraleja de la historia es, si tiene datos binarios (no alfanuméricos) (o una carga útil de tamaño significativo) para transmitir, use multipart / form-data. De lo contrario, utilice application / x-www-form-urlencoded. Los tipos MIME que menciona son los dos encabezados Content-Type para las solicitudes HTTP POST que deben soportar los agentes de usuario (navegadores). El propósito de ambos tipos de solicitudes es enviar una lista de pares nombre / valor al servidor. Dependiendo del tipo y cantidad de datos que se transmiten, uno de los métodos será más eficiente que el otro. Para entender por qué, usted tiene que mirar lo que cada uno está haciendo debajo de las cubiertas. Para la aplicación / x-www-form-urlencoded. El cuerpo del mensaje HTTP enviado al servidor es esencialmente una cadena de consulta gigante - los pares nombre / valor están separados por el ampersand (amp), y los nombres están separados de los valores por el símbolo equal (). Un ejemplo de esto sería: Los caracteres reservados y no alfanuméricos se sustituyen por HH, un signo de porcentaje y dos dígitos hexadecimales que representan el código ASCII del carácter. Esto significa que para cada byte no alfanumérico que existe en uno de nuestros valores, su Va a tomar tres bytes para representarlo. Para archivos binarios grandes, triplicar la carga útil va a ser altamente ineficiente. Con este método de transmisión de pares nombre / valor, cada par se representa como parte de un mensaje MIME (como se describe en otras respuestas). Las partes están separadas por un límite de cadena particular (elegido específicamente para que esta cadena de límite no se produzca en ninguna de las cargas de valor). Cada parte tiene su propio conjunto de encabezados MIME como Content-Type. Y particularmente Content-Disposition. Que puede dar a cada parte su nombre. La pieza de valor de cada par nombre / valor es la carga útil de cada parte del mensaje MIME. La especificación MIME nos da más opciones al representar la carga útil de valor - podemos escoger una codificación más eficiente de datos binarios para ahorrar ancho de banda (por ejemplo base 64 o incluso binario bruto). Por qué no utilizar multipart / form-data todo el tiempo Para valores alfanuméricos cortos (como la mayoría de los formularios web), la sobrecarga de agregar todos los encabezados MIME va a superar significativamente cualquier ahorro de la codificación binaria más eficiente. No creo HTTP está limitado a POST en multipart o x-www-form-urlencoded. El encabezado Content-Type es ortogonal al método HTTP POST (puede rellenar el tipo MIME que le convenga). Este es también el caso de las aplicaciones web de representación HTML típicas (por ejemplo, la carga útil de json se ha vuelto muy popular para la transmisión de carga útil para las solicitudes de ajax). En cuanto a Restful API sobre HTTP, los tipos de contenido más populares con los que entré en contacto son application / xml y application / json. XML es muy detallado, pero normalmente no es un problema cuando se utiliza la compresión y pensar que el caso de acceso a escritura (por ejemplo, a través de POST o PUT) es mucho más raro que el acceso de lectura (en muchos casos es lt3 de Todo el tráfico). Raramente allí donde los casos donde tuve que optimizar la existencia de funcionamiento de escritura de caracteres no-ascii: usted puede utilizar utf-8 como codificación en la existencia de XML de datos binarios: necesitaría utilizar base64 que codifica datos de nombre de archivo: usted puede encapsular este campo interior en Json es utf-8 datos binarios: base64 (también ver json-binario-pregunta) nombre de archivo datos: encapsular como propio Field-section dentro de los datos binarios de json como recurso propio Yo intentaría representar datos binarios como recurso propio / recurso. Añade otra llamada pero desacopla mejor las cosas. Ejemplo de imágenes: En recursos posteriores, podría simplemente incorporar el recurso binario como enlace: application / x-www-form-urlencoded es el tipo mime predeterminado de su solicitud (véase también w3.org/TR/html401/interact/forms. htmlh -17.13.4). Lo uso para formularios web quotnormalquot. Para API, utilizo application / xmljson. Multipart / form-data es una campana en el pensamiento de adjuntos (dentro del cuerpo de respuesta varias secciones de datos se concatenan con una cadena de límite definida). Sé que esto es 3 años demasiado tarde, pero la respuesta de Matts (aceptada) es incompleta y eventualmente te meterá en problemas. Ndash manuel aldana Oct 25 10 at 19:38 LEA POR LO MENOS EL PRIMER PARÁ AQUÍ. La clave aquí es que, si usted elige utilizar multipart / form-data. El límite no debe aparecer en el archivo de datos que finalmente recibe el servidor. Esto no es un problema para application / x-www-form-urlencoded. Porque no hay límite. X-www-form-urlencoded también puede manejar siempre datos binarios, por el sencillo expediente de convertir un byte arbitrario en tres bytes 7BIT. Ineficiente, pero funciona (y tenga en cuenta que el comentario acerca de no poder enviar nombres de archivo, así como datos binarios, es incorrecto, simplemente lo envía como otro par clave / valor). El problema con multipart / form-data es que el separador de frontera no debe estar presente en los datos de archivo (véase RFC2388 sección 5.2 también incluye una excusa bastante cojo por no tener un tipo MIME agregado adecuado que evita este problema). Así, a primera vista, multipart / form-data no tiene ningún valor en cualquier archivo de carga, binario o de otro tipo. Si no elige su límite correctamente, entonces eventualmente tendrá un problema, ya sea que envíe texto sin formato o binario en bruto. El servidor encontrará un límite en el lugar incorrecto y su archivo se truncará o el POST fallará. La clave es elegir una codificación y un límite para que los caracteres de límite seleccionados no puedan aparecer en la salida codificada. Una solución sencilla es usar base64 (no use binario en bruto). En base64 3 bytes arbitrarios se codifican en cuatro caracteres de 7 bits, donde el conjunto de caracteres de salida es A-Za-z0-9 / (es decir, alfanuméricos, o, /,). Es un caso especial, y sólo puede aparecer al final de la salida codificada, como un solo o un doble. Ahora, elija su límite como una cadena ASCII de 7 bits que no puede aparecer en la salida de base64. Muchas de las opciones que ve en la red fallan en esta prueba: los formularios MDN forman. Por ejemplo, utilizar blob como límite al enviar datos binarios - no es bueno. Sin embargo, algo como blob nunca aparecerá en la salida de base64. Mientras que una consideración de multipart / form-data es asegurar que el límite no aparece en los datos esto es bastante simple de lograr eligiendo un límite que es suficientemente largo. Por favor, no nos base64 codificación para lograr esto. Un límite que se genera aleatoriamente y la misma longitud que un UUID debe ser suficiente: stackoverflow / questions / 1705008 / hellip. Ndash Joshcodes Apr 30 14 at 22:01 EML, Esto no tiene sentido en absoluto. Obviamente, el cliente http (navegador) elige automáticamente el límite y el cliente será lo suficientemente inteligente como para no utilizar un límite que choca con el contenido de los archivos cargados. Es tan sencillo como un índice de coincidencia de subcadena -1. Ndash Pacerier dic 11 14 a las 8:01 BeniBela, Probablemente va a sugerir usar 39 () -. 47: entonces. Sin embargo, la generación aleatoria con la verificación de subcadena es todavía el camino a seguir y se puede hacer con una línea: while (true). Sugerencia EML39s (convertir a base64 sólo para evitar subcadenas coincidentes) es simplemente extraño, por no hablar de que viene con degradación de rendimiento innecesario. Y todo el problema para nada, ya que el algoritmo de una línea es igualmente sencillo y sencillo. Base64 no está destinado a ser (ab) utilizado de esta manera, como el cuerpo HTTP aceptar todos los octetos de 8 bits. Ndash Pacerier Jul 27 15 at 10:51 Esta respuesta no sólo agrega nada a la discusión, sino que también da un consejo equivocado. En primer lugar, siempre que se transmiten datos aleatorios en partes separadas, siempre es posible que el límite elegido esté presente en la carga útil. La única manera de asegurarnos de que esto no ocurra es examinar toda la carga útil para cada límite que obtenemos. Completamente poco práctico. Acabamos de aceptar la probabilidad infinitesimal de una colisión y llegar a un límite razonable, como quot --- boundary-ltUUID heregt-boundary --- quot. En segundo lugar, siempre usando Base64 perderá el ancho de banda y llenará los búferes sin ninguna razón. Ndash vagelis 5 de mayo a las 12:22 Estoy de acuerdo con mucho que Manuel ha dicho. De hecho, sus comentarios se refieren a este url. El tipo de contenido application / x-www-form-urlencoded es ineficiente para enviar grandes cantidades de datos binarios o texto que contengan caracteres que no sean ASCII. El tipo de contenido multipart / form-data debe utilizarse para enviar formularios que contengan archivos, datos no ASCII y datos binarios. Sin embargo, para mí, llegaría a la herramienta / marco de apoyo. ¿Qué herramientas y marcos esperas que tus usuarios de API construyan sus aplicaciones con ¿Tienen marcos o componentes que pueden usar que favorezcan un método sobre el otro? Si tienes una idea clara de tus usuarios y cómo van a utilizar tu API , Entonces eso te ayudará a decidir. Si haces que la carga de archivos sea difícil para tus usuarios de API, entonces ellos se alejan, de lo que pasas mucho tiempo en apoyarlos. Secundaria a esto sería el soporte de la herramienta que USTED tiene para escribir su API y lo fácil que es para su acomodar un mecanismo de carga sobre el otro. Sólo una pequeña sugerencia de mi lado para cargar datos de imagen de lienzo HTML5: Estoy trabajando en un proyecto para una imprenta y tuve algunos problemas debido a subir imágenes al servidor que provenían de un elemento de lienzo HTML5. Yo estaba luchando por lo menos una hora y no lo conseguí para guardar la imagen correctamente en mi servidor. Una vez que establecí la opción contentType de mi llamada ajax de jQuery a application / x-www-form-urlencoded, todo funcionó correctamente y los datos codificados en base64 se interpretaron correctamente y se guardaron correctamente como una imagen. Tal vez alguien ayuda a thatcfcontent Descripción Hace uno o ambos de lo siguiente: Establece el encabezado de codificación de contenido MIME para la página actual si la información de codificación incluye una codificación de caracteres, establece la codificación de caracteres de la salida generada. Envía el contenido de un archivo o de una variable que contiene datos binarios, como la salida de la página. Para restringir esta etiqueta, utilice la configuración del Administrador de ColdFusion gt Seguridad gt Sandbox Security. Para obtener más información, consulte la Ayuda en línea del administrador. Categoría Sintaxis Nota: Puede especificar estos atributos de etiquetas en un atributo attributeCollection cuyo valor es una estructura. Especifique el nombre de la estructura en el atributo attributeCollection y use los nombres de atributo tags como claves de estructura. Consulte también Historial ColdFusion 8: Cambió el comportamiento de la etiqueta si no se especifica el atributo de tipo y se especifica el atributo de archivo. Anteriormente, ColdFusion asumió un tipo de archivo predeterminado de texto / html. Ahora, ColdFusion intenta obtener el tipo de contenido del archivo. ColdFusion MX 7: Añadido el atributo variable. Atributos Nombre de un archivo en disco o en memoria cuyo contenido proporciona la salida de la página. El nombre de archivo debe comenzar con una letra de unidad y dos puntos, o una barra diagonal hacia adelante o hacia atrás. Cuando se utiliza ColdFusion en una configuración distribuida, el atributo file debe referirse a una ruta en el sistema en el que se ejecuta el servidor web. Cuando se utiliza este atributo, cualquier otra salida en la página CFML actual se ignora sólo el contenido del archivo se envían al cliente. Si especifica un atributo de archivo o variable, este atributo no tiene ningún efecto, de lo contrario, hace lo siguiente: sí. Descarta la salida que precede a la llamada a cfcontent no. Conserva la salida que precede a la llamada a cfcontent. En este caso, toda la salida se envía con el tipo especificado. El tipo de contenido MIME de la página, seguido opcionalmente por un punto y coma y la codificación de caracteres. De forma predeterminada, ColdFusion envía páginas como texto / tipo de contenido html en la codificación de caracteres UTF-8. Sin embargo, si se especifica el atributo de archivo, ColdFusion intenta obtener el tipo de contenido del archivo. El tipo de contenido determina cómo el navegador o el cliente interpreta el contenido de la página. Los siguientes son algunos de los valores de tipo de contenido que puede utilizar: Nombre de una variable binaria de ColdFusion cuyo contenido puede ser visualizado por el explorador, como el contenido de un gráfico generado por la etiqueta cfchart o un archivo PDF o Excel recuperado por un Etiqueta cffile actionreadBinary. Cuando se utiliza este atributo, cualquier otra salida en la página CFML actual se ignora sólo el contenido del archivo se envían al cliente. Uso Para definir la codificación de caracteres (conjunto de caracteres) de la salida generada, incluida la página HTML, utilice un código como el siguiente: Cuando ColdFusion procesa una solicitud HTTP, determina la codificación de caracteres a utilizar para los datos que devuelve en la respuesta HTTP. De forma predeterminada, ColdFusion devuelve datos de caracteres utilizando el formato Unicode UTF-8, independientemente del valor de una metaetiqueta HTML en la página. Puede utilizar la etiqueta cfcontent para anular la codificación de caracteres predeterminada de la respuesta. Por ejemplo, para indicarle a ColdFusion que devuelva la página usando la codificación de caracteres EUC japonesa, utilice el atributo type, de la siguiente manera: Si llama a la etiqueta cfcontent desde una etiqueta personalizada y no desea que la etiqueta descarte la página actual cuando está Llamado desde otra aplicación o etiqueta personalizada, establece reset no. Si una operación de eliminación de archivos no tiene éxito, ColdFusion lanza un error. No use esta etiqueta después de la etiqueta cfflush en una página, no tiene ningún efecto o ColdFusion lanza un error. La etiqueta siguiente puede forzar a la mayoría de los navegadores a mostrar un cuadro de diálogo que pregunta a los usuarios si desean guardar el contenido del archivo especificado por la etiqueta cfcontent utilizando el nombre de archivo especificado por el valor del nombre de archivo. Si el usuario selecciona para abrir el archivo, la mayoría de los navegadores abrir el archivo en la aplicación relacionada, no la ventana del navegador. Algunos tipos de archivos, como documentos PDF, no utilizan código ejecutable y pueden mostrarse directamente en la mayoría de los navegadores. Para solicitar al navegador que muestre el archivo directamente, utilice una etiqueta cfheader similar a la siguiente: Puede utilizar cualquier valor para la parte del nombre de archivo del atributo filename, pero la parte ext debe ser la extensión estándar de Windows para el tipo de archivo. Para los tipos de archivos que pueden contener código ejecutable, como los documentos de Microsoft Excel, la mayoría de los navegadores siempre preguntan antes de abrir el documento. Para estos tipos de archivo, la especificación de disposición de contenido en línea solicita al navegador que muestre el archivo directamente si el usuario selecciona para abrir el archivo. Para obtener más información sobre las codificaciones de caracteres, consulte las siguientes páginas web: La página atw3.org/International/O-charset. html proporciona información general sobre las codificaciones de caracteres y la web y tiene varios enlaces útiles. La página en iana. org/assignments/character-sets es una lista completa de nombres de conjuntos de caracteres utilizados en Internet, mantenidos por la Autoridad de Números Asignados de Internet. ColdFusion utiliza el JCE de Java para el soporte de codificación. La página en java. sun / javase / 6 / docs / technotes / guías / intl / encoding. doc. html enumera las codificaciones de caracteres que JCE 6, y por lo tanto ColdFusion, pueden interpretar. Esta lista utiliza nombres internos de Java, no los nombres de codificación de caracteres IANA que usa en el parámetro de conjunto de caracteres SetEncoding y otros atributos y parámetros de ColdFusion. Para obtener una lista completa de los tipos de medios utilizados en Internet, consulte iana. org/assignments/media-types/. Ejemplo17.1 Introducción a los formularios Un formulario HTML es una sección de un documento que contiene contenido normal, marcado, elementos especiales denominados controles (casillas de verificación, botones de radio, menús, etc.) y etiquetas de dichos controles. Los usuarios normalmente completan un formulario modificando sus controles (ingresando texto, seleccionando elementos de menú, etc.), antes de enviar el formulario a un agente para su procesamiento (por ejemplo, a un servidor Web, a un servidor de correo, etc.). Incluye etiquetas, botones de radio y botones (restablecer el formulario o enviarlo): Nota. Esta especificación incluye información más detallada sobre los formularios en las subsecciones en los problemas de presentación de formularios. Un nombre de control de control está dado por su atributo de nombre. El ámbito del atributo name para un control dentro de un elemento FORM es el elemento FORM. Cada control tiene un valor inicial y un valor actual, ambos son cadenas de caracteres. Consulte la definición de cada control para obtener información sobre los valores iniciales y las posibles restricciones sobre los valores impuestos por el control. En general, se puede especificar un valor inicial de los controles con el atributo de valor de los elementos de control. Sin embargo, el valor inicial de un elemento TEXTAREA está dado por su contenido y el valor inicial de un elemento OBJECT en un formulario es determinado por la implementación del objeto (es decir, está fuera del alcance de esta especificación). El valor actual de los controles se ajusta primero en el valor inicial. Posteriormente, el valor actual de los controles se puede modificar mediante la interacción del usuario y los scripts. El valor inicial de los controles no cambia. Por lo tanto, cuando se restablece un formulario, cada valor actual de control se restablece a su valor inicial. Si un control no tiene un valor inicial, el efecto de un restablecimiento de forma en ese control no está definido. Cuando se envía un formulario para su procesamiento, algunos controles tienen su nombre emparejado con su valor actual y estos pares se envían con el formulario. Los controles para los que se envían pares nombre / valor se denominan controles exitosos. HTML define los siguientes tipos de control: botones Los autores pueden crear tres tipos de botones: enviar botones. Cuando se activa, un botón de envío envía un formulario. Un formulario puede contener más de un botón de envío. Botones de reinicio. Cuando se activa, un botón de reinicio restablece todos los controles a sus valores iniciales. Apretar botones. Los botones no tienen comportamiento predeterminado. Cada botón puede tener secuencias de comandos del lado del cliente asociadas con los atributos de eventos de elementos. Cuando se produce un evento (por ejemplo, el usuario presiona el botón, lo libera, etc.), se activa el script asociado. Los autores deben especificar el lenguaje de secuencias de comandos de un script de pulsador mediante una declaración de script predeterminada (con el elemento META). Los autores crean botones con el elemento BOTÓN o el elemento INPUT. Consulte las definiciones de estos elementos para obtener detalles sobre cómo especificar diferentes tipos de botones. Nota. Los autores deben tener en cuenta que el elemento BUTTON ofrece capacidades de renderización más ricas que el elemento INPUT. Casillas de verificación Las casillas de verificación (y los botones de opción) son interruptores de encendido / apagado que pueden ser conmutados por el usuario. Un interruptor está encendido cuando se ha establecido el atributo de control de elementos seleccionados. Cuando se envía un formulario, sólo los controles de casilla de verificación pueden tener éxito. Varias casillas de verificación en un formulario pueden compartir el mismo nombre de control. Así, por ejemplo, las casillas de verificación permiten a los usuarios seleccionar varios valores para la misma propiedad. El elemento INPUT se utiliza para crear un control de casilla de verificación. Botones de radio Los botones de radio son como las casillas de verificación excepto que cuando varios comparten el mismo nombre de control. Son mutuamente excluyentes: cuando uno está encendido, todos los demás con el mismo nombre están apagados. El elemento INPUT se utiliza para crear un control de botón de radio. Si no hay ningún botón de radio en un conjunto compartiendo el mismo nombre de control está inicialmente activado, el comportamiento del agente de usuario para elegir qué control está inicialmente activado no está definido. Nota. Dado que las implementaciones existentes manejan este caso de manera diferente, la especificación actual difiere del RFC 1866 (RFC1866 sección 8.1.2.4), que establece: En todo momento, se comprueba exactamente uno de los botones de radio en un conjunto. Si ninguno de los elementos ltINPUTgt de un conjunto de botones de radio especifica CHECKED, el agente de usuario debe comprobar inicialmente el primer botón de opción del conjunto. Dado que el comportamiento del agente de usuario difiere, los autores deben asegurarse de que en cada conjunto de botones de radio que uno está inicialmente en. Menús Los menús ofrecen a los usuarios opciones para elegir. El elemento SELECT crea un menú, en combinación con los elementos OPTGROUP y OPTION. Entrada de texto Los autores pueden crear dos tipos de controles que permiten a los usuarios introducir texto. El elemento INPUT crea un control de entrada de una sola línea y el elemento TEXTAREA crea un control de entrada de varias líneas. En ambos casos, el texto de entrada se convierte en el valor actual de los controles. File select Este tipo de control permite al usuario seleccionar archivos para que su contenido pueda ser enviado con un formulario. El elemento INPUT se utiliza para crear un control de selección de archivos. Controles ocultos Los autores pueden crear controles que no se procesan pero cuyos valores se envían con un formulario. Los autores generalmente utilizan este tipo de control para almacenar información entre intercambios cliente / servidor que de otro modo se perderían debido a la naturaleza sin estado de HTTP (ver RFC2616). El elemento INPUT se utiliza para crear un control oculto. Controles de objetos Los autores pueden insertar objetos genéricos en formularios de forma que los valores asociados se envíen junto con otros controles. Los autores crean controles de objeto con el elemento OBJECT. Los elementos utilizados para crear controles generalmente aparecen dentro de un elemento FORM, pero también pueden aparecer fuera de una declaración de elemento FORM cuando se utilizan para crear interfaces de usuario. Esto se discute en la sección sobre eventos intrínsecos. Tenga en cuenta que los controles fuera de un formulario no pueden ser controles exitosos. 17.3 La acción del elemento FORM uri CT Este atributo especifica un agente de procesamiento de formularios. El comportamiento del agente de usuario para un valor distinto de un URI HTTP no está definido. Method getpost CI Este atributo especifica qué método HTTP se utilizará para enviar el conjunto de datos del formulario. Los valores posibles (sin distinción entre mayúsculas y minúsculas) son get (el valor predeterminado) y post. Consulte la sección sobre la presentación de formularios para obtener información sobre el uso. Enctype content-type CI Este atributo especifica el tipo de contenido utilizado para enviar el formulario al servidor (cuando el valor de method es post). El valor predeterminado para este atributo es application / x-www-form-urlencoded. El valor multipart / form-data debe utilizarse en combinación con el elemento INPUT, tipo file. Accept-charset charset list CI Este atributo especifica la lista de codificaciones de caracteres para los datos de entrada aceptados por el servidor que procesa este formulario. El valor es una lista delimitada por espacios y / o comas de los valores del conjunto de caracteres. El cliente debe interpretar esta lista como una lista exclusiva o, es decir, el servidor es capaz de aceptar cualquier codificación de caracteres individuales por entidad recibida. El valor predeterminado para este atributo es la cadena reservada UNKNOWN. Los agentes de usuario pueden interpretar este valor como la codificación de caracteres que se utilizó para transmitir el documento que contiene este elemento FORM. Accept content-type-list CI Este atributo especifica una lista de tipos de contenido separados por comas que un servidor que procesa este formulario manejará correctamente. Los agentes de usuario pueden usar esta información para filtrar archivos no conformes cuando solicitan a un usuario que seleccione los archivos que se enviarán al servidor (consulte el elemento INPUT cuando escriba archivo). Nombre cdata CI Este atributo nombra el elemento de forma que pueda referirse a él desde hojas de estilo o guiones. Nota. Este atributo se ha incluido para compatibilidad con versiones anteriores. Las aplicaciones deben utilizar el atributo id para identificar elementos. Atributos definidos en otra parte El elemento FORM actúa como un contenedor para controles. Especifica: El diseño del formulario (dado por el contenido del elemento). El programa que manejará el formulario completado y enviado (el atributo de acción). El programa de recepción debe ser capaz de analizar pares nombre / valor con el fin de hacer uso de ellos. El método por el cual se enviarán datos de usuario al servidor (el atributo de método). Una codificación de caracteres que debe ser aceptada por el servidor para poder manejar este formulario (el atributo accept-charset). Los agentes de usuario pueden informar al usuario del valor del atributo accept-charset y / o restringir la capacidad de los usuarios para introducir caracteres no reconocidos. Un formulario puede contener texto y marcado (párrafos, listas, etc.) además de controles de formulario. El ejemplo siguiente muestra un formulario que debe ser procesado por el programa adduser cuando se envía. El formulario se enviará al programa mediante el método de publicación HTTP. Consulte la sección sobre la presentación de formularios para obtener información sobre cómo los agentes de usuario deben preparar los datos de formulario para los servidores y cómo los agentes de usuario deben manejar las respuestas esperadas. Nota. Más discusión sobre el comportamiento de los servidores que reciben datos de forma está más allá del alcance de esta especificación. 17.4 El tipo de elemento INPUT textpasswordcheckboxradiosubmitresetfilehiddenimagebutton CI Este atributo especifica el tipo de control a crear. El valor predeterminado para este atributo es texto. Nombre cdata CI Este atributo asigna el nombre del control. Value cdata CA Este atributo especifica el valor inicial del control. Es opcional, excepto cuando el atributo type tiene el valor radio o checkbox. Size cdata CN Este atributo le dice al agente de usuario el ancho inicial del control. El ancho se indica en píxeles, excepto cuando el atributo type tiene el valor text o password. En ese caso, su valor se refiere al número (entero) de caracteres. Maxlength number CN Cuando el atributo type tiene el valor text o password, este atributo especifica el número máximo de caracteres que el usuario puede ingresar. Este número puede exceder el tamaño especificado. En cuyo caso el agente de usuario debería ofrecer un mecanismo de desplazamiento. El valor predeterminado para este atributo es un número ilimitado. Checked CI Cuando el atributo type tiene el valor radio o checkbox, este atributo booleano especifica que el botón está activado. Los agentes de usuario deben ignorar este atributo para otros tipos de control. Src uri CT Cuando el atributo type tiene la imagen de valor, este atributo especifica la ubicación de la imagen que se usará para decorar el botón de presentación gráfica. Atributos definidos en otra parte El tipo de control definido por el elemento INPUT depende del valor del atributo type: text Crea un control de entrada de texto de una sola línea. Contraseña Al igual que el texto, pero el texto de entrada se representa de tal manera que ocultar los caracteres (por ejemplo, una serie de asteriscos). Este tipo de control se utiliza a menudo para entradas sensibles, como contraseñas. Tenga en cuenta que el valor actual es el texto introducido por el usuario, no el texto procesado por el agente de usuario. Nota. Los diseñadores de aplicaciones deben tener en cuenta que este mecanismo ofrece sólo protección de seguridad ligera. Aunque la contraseña está enmascarada por agentes de usuario de observadores ocasionales, se transmite al servidor en texto claro y puede ser leído por cualquier persona con acceso de bajo nivel a la red. Checkbox Crea una casilla de verificación. Radio Crea un botón de radio. Submit Crea un botón de envío. Image Crea un botón de presentación gráfica. El valor del atributo src especifica el URI de la imagen que decorará el botón. Por razones de accesibilidad, los autores deben proporcionar texto alternativo para la imagen a través del atributo alt. Cuando se utiliza un dispositivo señalador para hacer clic en la imagen, se envía el formulario y se pasan las coordenadas de clic al servidor. El valor x se mide en píxeles desde la izquierda de la imagen y el valor y en píxeles desde la parte superior de la imagen. Los datos enviados incluyen el nombre. x valor x y nombre. y valor y donde nombre es el valor del atributo name, y valor x y valor y son los valores de coordenadas xey, respectivamente. Si el servidor toma diferentes acciones dependiendo de la ubicación en la que se haya hecho clic, los usuarios de navegadores no gráficos se verán en desventaja. Por esta razón, los autores deben considerar enfoques alternativos: Utilice varios botones de envío (cada uno con su propia imagen) en lugar de un solo botón de presentación gráfica. Los autores pueden usar hojas de estilo para controlar el posicionamiento de estos botones. Utilice un mapa de imagen del lado del cliente junto con secuencias de comandos. Reset Crea un botón de reinicio. Button Crea un pulsador. Los agentes de usuario deben utilizar el valor del atributo value como etiqueta de los botones. Hidden Crea un control oculto. File Crea un control de selección de archivos. Los agentes de usuario pueden utilizar el valor del atributo value como nombre de archivo inicial.17.4.2 Ejemplos de formularios que contienen controles INPUT El fragmento HTML de ejemplo siguiente define un formulario simple que permite al usuario introducir un nombre, apellido, dirección de correo electrónico, Y género. Cuando se activa el botón de envío, el formulario se enviará al programa especificado por el atributo action. Este formulario se puede representar de la siguiente manera: En la sección sobre el elemento LABEL, discutimos la marcación de etiquetas como nombre. En este ejemplo siguiente, la verificación de nombre de función JavaScript se activa cuando se produce el evento onclick: Consulte la sección sobre eventos intrínsecos para obtener más información sobre secuencias de comandos y eventos. El siguiente ejemplo muestra cómo se puede enviar el contenido de un archivo especificado por el usuario con un formulario. Se le pide al usuario su nombre y una lista de nombres de archivo cuyo contenido debe enviarse con el formulario. Al especificar el valor enctype de multipart / form-data, cada contenido de los archivos se empaquetará para su presentación en una sección separada de un documento de varias partes. 17.5 El elemento BUTTON Atributos definidos en otro lugar Los botones creados con la función BUTTON funcionan igual que los botones creados con el elemento INPUT, pero ofrecen posibilidades de renderización más ricas: el elemento BUTTON puede tener contenido. Por ejemplo, un elemento BUTTON que contiene una imagen funciona como y puede parecerse a un elemento INPUT cuyo tipo está definido como imagen, pero el tipo de elemento BUTTON permite contenido. Los agentes visuales del usuario pueden presionar los botones BUTTON con relieve y un movimiento hacia arriba / hacia abajo cuando se hace clic, mientras que pueden convertir los botones INPUT en imágenes planas. El siguiente ejemplo expande un ejemplo anterior, pero crea botones de envío y restablecimiento con BOTÓN en lugar de ENTRADA. Los botones contienen imágenes por medio del elemento IMG. Recuerde que los autores deben proporcionar texto alternativo para un elemento IMG. Es ilegal asociar un mapa de imagen con un IMG que aparece como el contenido de un elemento BUTTON. EJEMPLO ILEGAL: Lo siguiente no es HTML legal. 17.6 El botón SELECT. OPTGROUP. Y OPTION SELECT Definiciones de atributo nombre cdata CI Este atributo asigna el nombre del control. Número de tamaño CN Si un elemento SELECT se presenta como un cuadro de lista desplazado, este atributo especifica el número de filas de la lista que deben estar visibles al mismo tiempo. Los agentes de usuario visuales no están obligados a presentar un elemento SELECT como un cuadro de lista pueden utilizar cualquier otro mecanismo, como un menú desplegable. Multiple CI Si se establece, este atributo booleano permite múltiples selecciones. Si no se establece, el elemento SELECT solo permite selecciones individuales. Atributos definidos en otro lugar El elemento SELECT crea un menú. Cada opción ofrecida por el menú está representada por un elemento OPTION. Un elemento SELECT debe contener al menos un elemento OPTION. El elemento OPTGROUP permite a los autores agrupar las opciones lógicamente. Esto es particularmente útil cuando el usuario debe elegir entre una larga lista de opciones. Los grupos de opciones relacionadas son más fáciles de comprender y recordar que una única larga lista de opciones. En HTML 4, todos los elementos OPTGROUP deben especificarse directamente dentro de un elemento SELECT (es decir, los grupos no pueden estar anidados). Cero o más opciones pueden estar preseleccionadas para el usuario. User agents should determine which choices are pre-selected as follows: If no OPTION element has the selected attribute set, user agent behavior for choosing which option is initially selected is undefined. Nota. Since existing implementations handle this case differently, the current specification differs from RFC 1866 (RFC1866 section 8.1.3), which states: The initial state has the first option selected, unless a SELECTED attribute is present on any of the ltOPTIONgt elements. Since user agent behavior differs, authors should ensure that each menu includes a default pre-selected OPTION . If one OPTION element has the selected attribute set, it should be pre-selected. If the SELECT element has the multiple attribute set and more than one OPTION element has the selected attribute set, they should all be pre-selected. It is considered an error if more than one OPTION element has the selected attribute set and the SELECT element does not have the multiple attribute set. User agents may vary in how they handle this error, but should not pre-select more than one choice. OPTGROUP Attribute definitions label text CS This attribute specifies the label for the option group. Attributes defined elsewhere Note. Implementors are advised that future versions of HTML may extend the grouping mechanism to allow for nested groups (i. e. OPTGROUP elements may nest). This will allow authors to represent a richer hierarchy of choices. OPTION Attribute definitions selected CI When set, this boolean attribute specifies that this option is pre-selected. value cdata CS This attribute specifies the initial value of the control. If this attribute is not set, the initial value is set to the contents of the OPTION element. label text CS This attribute allows authors to specify a shorter label for an option than the content of the OPTION element. When specified, user agents should use the value of this attribute rather than the content of the OPTION element as the option label. Attributes defined elsewhere When rendering a menu choice. user agents should use the value of the label attribute of the OPTION element as the choice. If this attribute is not specified, user agents should use the contents of the OPTION element. The label attribute of the OPTGROUP element specifies the label for a group of choices. In this example, we create a menu that allows the user to select which of seven software components to install. The first and second components are pre-selected but may be deselected by the user. The remaining components are not pre-selected. The size attribute states that the menu should only have 4 rows even though the user may select from among 7 options. The other options should be made available through a scrolling mechanism. The SELECT is followed by submit and reset buttons. Only selected options will be successful (using the control name component-select). When no options are selected, the control is not successful and neither the name nor any values are submitted to the server when the form is submitted. Note that where the value attribute is set, it determines the controls initial value. otherwise its the elements contents. In this example we use the OPTGROUP element to group choices. The following markup: represents the following grouping: Visual user agents may allow users to select from option groups through a hierarchical menu or some other mechanism that reflects the structure of choices. A graphical user agent might render this as: This image shows a SELECT element rendered as cascading menus. The top label of the menu displays the currently selected value (PortMaster 3, 3.7.1). The user has unfurled two cascading menus, but has not yet selected the new value (PortMaster 2, 3.7). Note that each cascading menu displays the label of an OPTGROUP or OPTION element. 17.7 The TEXTAREA element name cdata CI This attribute assigns the control name. rows number CN This attribute specifies the number of visible text lines. Users should be able to enter more lines than this, so user agents should provide some means to scroll through the contents of the control when the contents extend beyond the visible area. cols number CN This attribute specifies the visible width in average character widths. Users should be able to enter longer lines than this, so user agents should provide some means to scroll through the contents of the control when the contents extend beyond the visible area. User agents may wrap visible text lines to keep long lines visible without the need for scrolling. Attributes defined elsewhere The TEXTAREA element creates a multi-line text input control. User agents should use the contents of this element as the initial value of the control and should render this text initially. This example creates a TEXTAREA control that is 20 rows by 80 columns and contains two lines of text initially. The TEXTAREA is followed by submit and reset buttons. Setting the readonly attribute allows authors to display unmodifiable text in a TEXTAREA. This differs from using standard marked-up text in a document because the value of TEXTAREA is submitted with the form. 17.8 The ISINDEX element ISINDEX is deprecated . This element creates a single-line text input control. Authors should use the INPUT element to create text input controls. See the Transitional DTD for the formal definition. prompt text CS Deprecated. This attribute specifies a prompt string for the input field. Attributes defined elsewhere The ISINDEX element creates a single-line text input control that allows any number of characters. User agents may use the value of the prompt attribute as a title for the prompt. DEPRECATED EXAMPLE: The following ISINDEX declaration: could be rewritten with INPUT as follows: Semantics of ISINDEX. Currently, the semantics for ISINDEX are only well-defined when the base URI for the enclosing document is an HTTP URI. In practice, the input string is restricted to Latin-1 as there is no mechanism for the URI to specify a different character set. Some form controls automatically have labels associated with them (press buttons) while most do not (text fields, checkboxes and radio buttons, and menus). For those controls that have implicit labels, user agents should use the value of the value attribute as the label string. The LABEL element is used to specify labels for controls that do not have implicit labels, 17.9.1 The LABEL element for idref CS This attribute explicitly associates the label being defined with another control. When present, the value of this attribute must be the same as the value of the id attribute of some other control in the same document. When absent, the label being defined is associated with the elements contents. Attributes defined elsewhere The LABEL element may be used to attach information to controls. Each LABEL element is associated with exactly one form control. The for attribute associates a label with another control explicitly: the value of the for attribute must be the same as the value of the id attribute of the associated control element. More than one LABEL may be associated with the same control by creating multiple references via the for attribute. This example creates a table that is used to align two text input controls and their associated labels. Each label is associated explicitly with one text input : This example extends a previous example form to include LABEL elements. To associate a label with another control implicitly, the control element must be within the contents of the LABEL element. In this case, the LABEL may only contain one control element. The label itself may be positioned before or after the associated control. In this example, we implicitly associate two labels with two text input controls: Note that this technique cannot be used when a table is being used for layout, with the label in one cell and its associated control in another cell. When a LABEL element receives focus. it passes the focus on to its associated control. See the section below on access keys for examples. Labels may be rendered by user agents in a number of ways (e. g. visually, read by speech synthesizers, etc.) 17.10 Adding structure to forms: the FIELDSET and LEGEND elements LEGEND Attribute definitions align topbottomleftright CI Deprecated. This attribute specifies the position of the legend with respect to the fieldset. Possible values: top: The legend is at the top of the fieldset. Este es el valor predeterminado. bottom: The legend is at the bottom of the fieldset. left: The legend is at the left side of the fieldset. right: The legend is at the right side of the fieldset. Attributes defined elsewhere The FIELDSET element allows authors to group thematically related controls and labels. Grouping controls makes it easier for users to understand their purpose while simultaneously facilitating tabbing navigation for visual user agents and speech navigation for speech-oriented user agents. The proper use of this element makes documents more accessible. The LEGEND element allows authors to assign a caption to a FIELDSET. The legend improves accessibility when the FIELDSET is rendered non-visually. In this example, we create a form that one might fill out at the doctors office. It is divided into three sections: personal information, medical history, and current medication. Each section contains controls for inputting the appropriate information. Note that in this example, we might improve the visual presentation of the form by aligning elements within each FIELDSET (with style sheets), adding color and font information (with style sheets), adding scripting (say, to only open the current medication text area if the user indicates he or she is currently on medication), etc. In an HTML document, an element must receive focus from the user in order to become active and perform its tasks. For example, users must activate a link specified by the A element in order to follow the specified link. Similarly, users must give a TEXTAREA focus in order to enter text into it. There are several ways to give focus to an element: Designate the element with a pointing device. Navigate from one element to the next with the keyboard. The documents author may define a tabbing order that specifies the order in which elements will receive focus if the user navigates the document with the keyboard (see tabbing navigation ). Once selected, an element may be activated by some other key sequence. Select an element through an access key (sometimes called keyboard shortcut or keyboard accelerator). tabindex number CN This attribute specifies the position of the current element in the tabbing order for the current document. This value must be a number between 0 and 32767. User agents should ignore leading zeros. The tabbing order defines the order in which elements will receive focus when navigated by the user via the keyboard. The tabbing order may include elements nested within other elements. Elements that may receive focus should be navigated by user agents according to the following rules: Those elements that support the tabindex attribute and assign a positive value to it are navigated first. Navigation proceeds from the element with the lowest tabindex value to the element with the highest value. Values need not be sequential nor must they begin with any particular value. Elements that have identical tabindex values should be navigated in the order they appear in the character stream. Those elements that do not support the tabindex attribute or support it and assign it a value of 0 are navigated next. These elements are navigated in the order they appear in the character stream. Elements that are disabled do not participate in the tabbing order. In this example, the tabbing order will be the BUTTON. the INPUT elements in order (note that field1 and the button share the same tabindex, but field1 appears later in the character stream), and finally the link created by the A element. Tabbing keys. The actual key sequence that causes tabbing navigation or element activation depends on the configuration of the user agent (e. g. the tab key is used for navigation and the enter key is used to activate a selected element). User agents may also define key sequences to navigate the tabbing order in reverse. When the end (or beginning) of the tabbing order is reached, user agents may circle back to the beginning (or end). accesskey character CN This attribute assigns an access key to an element. An access key is a single character from the document character set. Nota. Authors should consider the input method of the expected reader when specifying an accesskey. Pressing an access key assigned to an element gives focus to the element. The action that occurs when an element receives focus depends on the element. For example, when a user activates a link defined by the A element, the user agent generally follows the link. When a user activates a radio button, the user agent changes the value of the radio button. When the user activates a text field, it allows input, etc. This example assigns the access key U to a label associated with an INPUT control. Typing the access key gives focus to the label which in turn gives it to the associated control. The user may then enter text into the INPUT area. In this example, we assign an access key to a link defined by the A element. Typing this access key takes the user to another document, in this case, a table of contents. The invocation of access keys depends on the underlying system. For instance, on machines running MS Windows, one generally has to press the alt key in addition to the access key. On Apple systems, one generally has to press the cmd key in addition to the access key. The rendering of access keys depends on the user agent. We recommend that authors include the access key in label text or wherever the access key is to apply. User agents should render the value of an access key in such a way as to emphasize its role and to distinguish it from other characters (e. g. by underlining it). In contexts where user input is either undesirable or irrelevant, it is important to be able to disable a control or render it read-only. For example, one may want to disable a forms submit button until the user has entered some required data. Similarly, an author may want to include a piece of read-only text that must be submitted as a value along with the form. The following sections describe disabled and read-only controls. disabled CI When set for a form control, this boolean attribute disables the control for user input. When set, the disabled attribute has the following effects on an element: This attribute is inherited but local declarations override the inherited value. How disabled elements are rendered depends on the user agent. For example, some user agents gray out disabled menu items, button labels, etc. In this example, the INPUT element is disabled. Therefore, it cannot receive user input nor will its value be submitted with the form. Nota. The only way to modify dynamically the value of the disabled attribute is through a script. readonly CI When set for a form control, this boolean attribute prohibits changes to the control. The readonly attribute specifies whether the control may be modified by the user. When set, the readonly attribute has the following effects on an element: Read-only elements receive focus but cannot be modified by the user. Read-only elements are included in tabbing navigation . Read-only elements may be successful . The following elements support the readonly attribute: INPUT and TEXTAREA . How read-only elements are rendered depends on the user agent. Nota. The only way to modify dynamically the value of the readonly attribute is through a script. The following sections explain how user agents submit form data to form processing agents. The method attribute of the FORM element specifies the HTTP method used to send the form to the processing agent. This attribute may take two values: get: With the HTTP get method, the form data set is appended to the URI specified by the action attribute (with a question-mark () as separator) and this new URI is sent to the processing agent. post: With the HTTP post method, the form data set is included in the body of the form and sent to the processing agent. The get method should be used when the form is idempotent (i. e. causes no side-effects). Many database searches have no visible side-effects and make ideal applications for the get method. If the service associated with the processing of a form causes side effects (for example, if the form modifies a database or subscription to a service), the post method should be used. Nota. The get method restricts form data set values to ASCII characters. Only the post method (with enctype multipart/form-data) is specified to cover the entire ISO10646 character set. A successful control is valid for submission. Every successful control has its control name paired with its current value as part of the submitted form data set. A successful control must be defined within a FORM element and must have a control name. Controls that are disabled cannot be successful. If a form contains more than one submit button. only the activated submit button is successful. All on checkboxes may be successful. For radio buttons that share the same value of the name attribute, only the on radio button may be successful. For menus. the control name is provided by a SELECT element and values are provided by OPTION elements. Only selected options may be successful. When no options are selected, the control is not successful and neither the name nor any values are submitted to the server when the form is submitted. The current value of a file select is a list of one or more file names. Upon submission of the form, the contents of each file are submitted with the rest of the form data. The file contents are packaged according to the forms content type . The current value of an object control is determined by the objects implementation. If a control doesnt have a current value when the form is submitted, user agents are not required to treat it as a successful control. Furthermore, user agents should not consider the following controls successful: Hidden controls and controls that are not rendered because of style sheet settings may still be successful. For example: will still cause a value to be paired with the name invisible-password and submitted with the form. When the user submits a form (e. g. by activating a submit button ), the user agent processes it as follows. Step one: Identify the successful controls Step two: Build a form data set The form data set is then encoded according to the content type specified by the enctype attribute of the FORM element. Finally, the encoded data is sent to the processing agent designated by the action attribute using the protocol specified by the method attribute. This specification does not specify all valid submission methods or content types that may be used with forms. However, HTML 4 user agents must support the established conventions in the following cases: If the method is get and the action is an HTTP URI, the user agent takes the value of action. appends a to it, then appends the form data set. encoded using the application/x-www-form-urlencoded content type. The user agent then traverses the link to this URI. In this scenario, form data are restricted to ASCII codes. If the method is post and the action is an HTTP URI, the user agent conducts an HTTP post transaction using the value of the action attribute and a message created according to the content type specified by the enctype attribute. For any other value of action or method. behavior is unspecified. User agents should render the response from the HTTP get and post transactions. The enctype attribute of the FORM element specifies the content type used to encode the form data set for submission to the server. User agents must support the content types listed below. Behavior for other content types is unspecified. This is the default content type. Forms submitted with this content type must be encoded as follows: Control names and values are escaped. Space characters are replaced by . and then reserved characters are escaped as described in RFC1738. section 2.2: Non-alphanumeric characters are replaced by HH. a percent sign and two hexadecimal digits representing the ASCII code of the character. Line breaks are represented as CR LF pairs (i. e. 0D0A ). The control names/values are listed in the order they appear in the document. The name is separated from the value by and name/value pairs are separated from each other by amp . Nota. Please consult RFC2388 for additional information about file uploads, including backwards compatibility issues, the relationship between multipart/form-data and other content types, performance issues, etc. Please consult the appendix for information about security issues for forms . The content type application/x-www-form-urlencoded is inefficient for sending large quantities of binary data or text containing non-ASCII characters. The content type multipart/form-data should be used for submitting forms that contain files, non-ASCII data, and binary data. The content multipart/form-data follows the rules of all multipart MIME data streams as outlined in RFC2045. The definition of multipart/form-data is available at the IANA registry. A multipart/form-data message contains a series of parts, each representing a successful control. The parts are sent to the processing agent in the same order the corresponding controls appear in the document stream. Part boundaries should not occur in any of the data how this is done lies outside the scope of this specification. As with all multipart MIME types, each part has an optional Content-Type header that defaults to text/plain. User agents should supply the Content-Type header, accompanied by a charset parameter. Each part is expected to contain: a Content-Disposition header whose value is form-data. a name attribute specifying the control name of the corresponding control. Control names originally encoded in non-ASCII character sets may be encoded using the method outlined in RFC2045 . Thus, for example, for a control named mycontrol, the corresponding part would be specified: As with all MIME transmissions, CR LF (i. e. 0D0A ) is used to separate lines of data. Each part may be encoded and the Content-Transfer-Encoding header supplied if the value of that part does not conform to the default (7BIT) encoding (see RFC2045. section 6) If the contents of a file are submitted with a form, the file input should be identified by the appropriate content type (e. g. application/octet-stream). If multiple files are to be returned as the result of a single form entry, they should be returned as multipart/mixed embedded within the multipart/form-data. The user agent should attempt to supply a file name for each submitted file. The file name may be specified with the filename parameter of the Content-Disposition: form-data header, or, in the case of multiple files, in a Content-Disposition: file header of the subpart. If the file name of the clients operating system is not in US-ASCII, the file name might be approximated or encoded using the method of RFC2045. This is convenient for those cases where, for example, the uploaded files might contain references to each other (e. g. a TeX file and its. sty auxiliary style description). The following example illustrates multipart/form-data encoding. Suppose we have the following form: If the user enters Larry in the text input, and selects the text file file1.txt, the user agent might send back the following data: If the user selected a second (image) file file2.gif, the user agent might construct the parts as follows:

No comments:

Post a Comment