

# Creación de un formulario HTML (mediante AWS Signature Version 4)
<a name="sigv4-HTTPPOSTForms"></a>

**Topics**
+ [Declaración de formulario HTML](#HTTPPOSTFormDeclaration)
+ [Campos de formulario HTML](#sigv4-HTTPPOSTFormFields)

Para que los usuarios puedan cargar contenido en Amazon S3 con sus navegadores (solicitudes HTTP POST), debe utilizar los formularios HTML. Los formularios HTML constan de una declaración de formulario y campos de formulario. Cada declaración de formulario incluye información de alto nivel acerca de la solicitud. Los campos del formulario contienen información detallada sobre la solicitud.

En esta sección, se describe cómo crear formularios HTML. Para ver un ejemplo práctico de carga basada en un navegador mediante HTTP POST y cálculos de firma relacionados para la autenticación de solicitudes, consulte [Ejemplo: carga basada en el navegador con HTTP POST (con AWS Signature Version 4)](sigv4-post-example.md).

El formulario y la política deben estar cifrados con UTF-8. Puede aplicar la codificación UTF-8 al formulario mediante la especificación de `charset=UTF-8` en el atributo `content`. A continuación, se muestra un ejemplo de la codificación UTF-8 en el encabezado HTML.

```
1. <html>
2.   <head>
3.     ...
4.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
5.     ...
6.   </head>
7.   <body>
```

A continuación, se muestra un ejemplo de la codificación UTF-8 en un encabezado de solicitud.

```
1. Content-Type: text/html; charset=UTF-8
```

**nota**  
Los datos y límites del formulario (sin incluir los contenidos del archivo) no pueden exceder los 20 KB.

## Declaración de formulario HTML
<a name="HTTPPOSTFormDeclaration"></a>

La declaración del formulario HTML tiene los tres atributos siguientes:

 
+ `action`: la URL que procesa la solicitud, que debe establecerse en la URL del bucket. Por ejemplo, si el nombre del bucket es `examplebucket`, la URL es `http://examplebucket.s3.amazonaws.com/`.
**nota**  
El nombre de clave se especifica en un campo de formulario.
+  `method`: el método debe ser POST.
+  `enctype`: el tipo de documento adjunto (`enctype`) se debe establecer en datos de formulario o multiparte para cargas de archivos y cargas de área de texto. Para obtener más información acerca de `enctype`, consulte [RFC 1867](http://www.ietf.org/rfc/rfc1867.txt).

Es una declaración de formulario para el bucket `examplebucket`.

```
1. <form action="http://examplebucket.s3.amazonaws.com/" method="post"
2. 
3. enctype="multipart/form-data">
```

## Campos de formulario HTML
<a name="sigv4-HTTPPOSTFormFields"></a>

En la siguiente tabla, se describe una lista de los campos que se pueden utilizar en un formulario. Entre otros campos, hay un campo de firma que puede usar para autenticar las solicitudes. Hay campos para especificar el algoritmo de cálculo de firmas (`x-amz-algorithm`), el alcance de las credenciales (`x-amz-credential`) que utilizó para generar la clave de firma y la fecha (`x-amz-date`) utilizada para calcular la firma. Amazon S3 utiliza esta información para volver a crear la firma. Si las firmas coinciden, Amazon S3 procesa la solicitud.

**nota**  
La variable `${filename}` se reemplaza automáticamente con el nombre del archivo provisto por el usuario y es reconocida por todos los campos de formulario. Si el navegador o el cliente proporciona una ruta total o parcial al archivo, solo se utilizará el texto después de la última barra inclinada (/) o barra inversa (\\) (por ejemplo, `C:\Program Files\directory1\file.txt` se interpreta como `file.txt`). Si no se brinda ningún archivo o nombre de archivo, la variable se reemplaza con una cadena vacía.

Si no proporciona los elementos necesarios para las solicitudes autenticadas, como el elemento `policy`, se asume que la solicitud es anónima y solo tendrá éxito si ha configurado el bucket para que sea de lectura y escritura públicas. 


| Nombre del elemento | Descripción | Obligatorio | 
| --- | --- | --- | 
| acl | Una lista de control de acceso (ACL) de Amazon S3. Si se especifica una ACL no válida, Amazon S3 deniega la solicitud. Para obtener más información acerca de las ACL, consulte [Uso de las ACL de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3_ACLs_UsingACLs.html).<br />Tipo: cadena<br />Valor predeterminado: privado<br /> Valores válidos: `private \| public-read \| public-read-write \| aws-exec-read \| authenticated-read \| bucket-owner-read \| bucket-owner-full-control `  | No | 
| Cache-Control`Content-Type`<br />`Content-Disposition`<br />`Content-Encoding`<br />`Expires` | Encabezados específicos de REST. Para obtener más información, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html). | No | 
| key | El nombre de la clave del objeto cargado.<br />Para utilizar el nombre de archivo provisto por el usuario, utilice la variable ${filename}. Por ejemplo, si carga un archivo `photo1.jpg` y especifica `/user/user1/${filename}` como nombre de clave, el archivo se almacena como `/user/user1/photo1.jpg`.<br />Para obtener más información, consulte [Clave de objeto y metadatos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html) en la *Guía del usuario de Amazon Simple Storage Service*. | Sí | 
| policy | La política de seguridad codificada en base64 que describe lo q‎ue se permite en la solicitud. Para las solicitudes autenticadas, se requiere una política. <br />Las solicitudes sin una política de seguridad se consideran anónimas y solo se aceptarán en un bucket que se puede escribir públicamente.  | Obligatorio para las solicitudes autenticadas | 
| success\_action\_redirect | URL al que el cliente es redirigido después de la carga exitosa.<br />Si no se especifica `success_action_redirect` o Amazon S3 no puede interpretar la URL, Amazon S3 devuelve el tipo de documento vacío especificado en el campo `success_action_status`.<br />Si la carga produce un error, Amazon S3 devuelve un error y no redirige al usuario a otra URL.<br /> | No | 
| success\_action\_status | El código de estado devuelto al cliente después de la carga exitosa si no se especifica `success_action_redirect`.<br />Los valores válidos son `200`, `201` o `204` (predeterminado).<br />Si el valor se establece en 200 o 204, Amazon S3 devuelve un documento vacío con el código de estado especificado.<br />Si el valor se establece en 201, Amazon S3 devuelve un documento XML con un código de estado 201. Para obtener información acerca del contenido del documento XML, consulte [POST Object](RESTObjectPOST.md).<br />Si el valor no se establece o no es válido, Amazon S3 devuelve un documento vacío con un código de estado 204.  Algunas versiones de Adobe Flash Player no controlan debidamente las respuestas HTTP con un cuerpo vacío. Para admitir cargas con Adobe Flash, recomendamos establecer `success_action_status` en 201.  | No | 
| x-amz-algorithm | El algoritmo de firma utilizado para autenticar la solicitud. Para AWS Signature Version 4, el valor es `AWS4-HMAC-SHA256`.<br /> Este campo es obligatorio si se incluye un documento de política en la solicitud. | Obligatorio para las solicitudes autenticadas | 
| x-amz-credential |  Además del ID de clave de acceso, este campo también proporciona información de alcance, lo que identifica la región y el servicio para los que es válida la firma. Debe ser el mismo alcance que utilizó al calcular la clave de firma para el cálculo de la firma. <br />Es una cadena del formulario siguiente:<br />`{{<your-access-key-id>}}/{{<date>}}/{{<aws-region>}}/{{<aws-service>}}/aws4_request `<br />Por ejemplo:<br /> ` AKIAIOSFODNN7EXAMPLE/20130728/us-east-1/s3/aws4_request` ` `<br />  Para Amazon S3, la cadena aws-service es s3. Para obtener una lista de las cadenas de aws-region de Amazon S3, consulte [Regiones y puntos de conexión](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) en Referencia general de AWS. Esto es obligatorio si se incluye un documento de política con la solicitud. | Obligatorio para las solicitudes autenticadas | 
| x-amz-date | Es el valor de la fecha en formato ISO8601. Por ejemplo, `20130728T000000Z`. <br />Es la misma fecha que utilizó al crear la clave de firma (por ejemplo, 20130728). Este debe ser también el mismo valor que proporciona en la política (`x-amz-date`) que firmó. <br />Esto es obligatorio si se incluye un documento de política con la solicitud. | Obligatorio para las solicitudes autenticadas | 
| x-amz-security-token | Un token de seguridad utilizado por Amazon DevPay y las credenciales de sesión<br /> Si la solicitud utiliza Amazon DevPay, se requieren dos campos de formulario `x-amz-security-token`: uno para el token de producto y otro para el token de usuario. Para obtener más información, consulte [Uso de DevPay](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingDevPay.html) en la *Guía del usuario de Amazon Simple Storage Service*.<br />Si la solicitud utiliza credenciales de sesión, se requiere un formulario `x-amz-security-token`. Para obtener más información, consulte [Solicitud de credenciales de seguridad temporales](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) en la *Guía del usuario de IAM*. | No | 
| x-amz-signature | (AWS Signature Version 4) El hash HMAC-SHA256 de la política de seguridad. <br /> Este campo es obligatorio si se incluye un documento de política en la solicitud. | Obligatorio para las solicitudes autenticadas | 
| x-amz-meta-\* | Los nombres de campos que comienzan con este prefijo son metadatos definidos por el usuario. Cada uno de ellos se almacena y se devuelve como un conjunto de pares clave-valor. Amazon S3 no valida ni interpreta metadatos definidos por el usuario. Para obtener más información, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html). | No | 
| x-amz-\* | Consulte POST Object ([POST Object](RESTObjectPOST.md) para otros encabezados `x-amz-*`). | No | 
| file | Contenido de texto o archivo. <br />El archivo o el contenido debe ser el último campo en el formulario.<br />No puede cargar más de un archivo a la vez. | Sí | 

Los elementos condicionales son obligatorios para las solicitudes autenticadas y son opcionales para las solicitudes anónimas. 

Ahora que sabe cómo crear formularios, puede crear una política de seguridad que puede firmar. Para obtener más información, consulte [Política POST](sigv4-HTTPPOSTConstructPolicy.md).