Cómo establecer isBase64Encoded como verdadero en la respuesta de Laravel
Estoy construyendo una aplicación en Laravel 8 y alojando la aplicación en AWS Lambda. Quiero comprimir la respuesta con gzip para la solicitud HTTP. Tuve interacción con el soporte de AWS y me pidieron que agregara headers con ‘Content-Encoding’ => ‘gzip’, y también agregar isBase64Encoded a true. Para lograr esto, intenté buscar la solución en internet y encontré una documentación para Laravel Vapor que maneja esto perfectamente. Crearon un middleware que agrega estos atributos:
$response = $next($request);
if (in_array(‘gzip’, $request->getEncodings()) && function_exists(‘gzencode’)) {
$response->setContent(gzencode($response->getContent(), 9));
$response->headers->add([
‘Content-Encoding’ => ‘gzip’,
‘X-Vapor-Base64-Encode’ => ‘True’,
]);
}
return $response;
Mi encabezado actual se ve así:
Dado que no estoy utilizando Laravel Vapor, necesito agregar isBase64Encoded al encabezado:
Intenté ejecutar esto a través de:
$response = $next($request);
if (in_array(‘gzip’, $request->getEncodings()) && function_exists(‘gzencode’)) {
$response->setContent(gzencode($response->getContent(), 9));
$response->headers->add([
‘Content-Encoding’ => ‘gzip’,
]);
$response->isBase64Encoded = true;
dd($response);
}
return $response;
Como puedes ver, intento agregar el atributo con $response->isBase64Encoded = true;, una vez implementado, el encabezado cambia a algo inesperado:
Además, el contenido no está codificado. Ayúdame a agregar los atributos isBase64Encoded en la respuesta.
davy.ai
Para agregar el atributo
isBase64Encoded
a la respuesta, puede modificar el código del middleware de la siguiente manera:Aquí, después de comprimir el contenido usando gzip, codificamos el contenido usando base64 y establecemos el atributo
isBase64Encoded
como verdadero. Además, también establecemos el encabezadoContent-Encoding
engzip
para indicar que el contenido está comprimido.Es importante tener en cuenta que la documentación de AWS especifica que el encabezado
Content-Encoding
debe establecerse engzip
solo si el contenido está comprimido. Si el contenido no está comprimido, el encabezado no debe establecerse. Por lo tanto, debe actualizar su middleware en consecuencia.