htaccess - http headers compression
Comprimir datos de publicaciĆ³n HTTP enviados desde el navegador (2)
¿El navegador automáticamente codificará en gzip tus datos por ti? La respuesta corta es ...
HAAHAHAAahahahahahhaha.
La respuesta larga es que algunos usuarios-agentes pueden hacer cosas como esta, pero definitivamente no se puede confiar en eso. El estado de los documentos apache mod_deflate:
algunas aplicaciones especiales soportan la compresión de solicitudes, por ejemplo, algunos clientes WebDAV.
Entonces, no, eso no va a funcionar. Tendrá que generar el mensaje de solicitud HTTP apropiado usted mismo. El encabezado apropiado en este caso es Content-Encoding: gzip
y NOT Content-Type:
porque el contenido en sí es application/json
, solo busca codificar el cuerpo de entidad de su mensaje de solicitud HTTP para el transporte.
Tenga en cuenta que también debe agregar el encabezado Content-Length:
apropiado Content-Length:
especificando el tamaño en bytes del cuerpo de la entidad del mensaje después de la compresión -O-, envíe su mensaje HTTP usando Transfer-Encoding: chunked
y Transfer-Encoding: chunked
la especificación de longitud del contenido.
En el extremo receptor, puede indicar a mod_deflate
que use un filtro de entrada para descomprimir la información:
<Location /dav-area>
SetInputFilter DEFLATE
</Location>
Esto es un poco pesado si solo recibe cuerpos de mensajes comprimidos para un par de recursos. En su lugar, probablemente solo deba usar el script del lado del cliente para verificar el Content-Encoding: gzip
y descomprimir manualmente el cuerpo de la solicitud. Cómo hacer esto en, digamos, PHP, es otra pregunta por completo. Si necesita detalles para eso, debe publicar otra pregunta.
Quiero enviar una información POST comprimida con Javascript a un servidor que controlo. ¿Hay alguna manera de dejar que la capa HTTP se ocupe de la compresión?
Estoy enviando JSON. Si configuro el tipo de contenido como GZIP / desinflar, ¿el navegador lo comprimirá automáticamente y luego Apache con el mod desinflado lo descomprimirá automáticamente para que mi aplicación no tenga que pensar en absoluto sobre los datos que se comprimen?
Sé que puede funcionar al revés pero de alguna manera hacer que funcione de esta manera?
Acabo de lograr esto usando https://github.com/dankogai/js-deflate. Sin embargo, los postdata, por la razón que sea, eliminarán los signos + y los reemplazarán con espacios.
Para enviar los datos a través de javascript:
params.mapdata= btoa(RawDeflate.deflate(JSON.stringify(mapdata)));
Para recibir los datos a través de php:
$value = gzinflate(base64_decode(preg_replace(''//s/'', ''+'',$value)));