es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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í:

Imagen

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:

Imagen

Además, el contenido no está codificado. Ayúdame a agregar los atributos isBase64Encoded en la respuesta.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para agregar el atributo isBase64Encoded a la respuesta, puede modificar el código del middleware de la siguiente manera:

    $response = $next($request);
    
    if (in_array('gzip', $request->getEncodings()) && function_exists('gzencode')) {
        $content = gzencode($response->getContent(), 9);
        $response->setContent($content);
        $response->headers->set ('Content-Encoding', 'gzip');
    
        $base64Enc = base64_encode($content);
        $response->setContent($base64Enc);
        $response->isBase64Encoded = true;
    }
    
    return $response;
    

    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 encabezado Content-Encoding en gzip 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 en gzip 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.

Comments are closed.