I want to send a compressed POST data with Javascript to a server I control. Is there any way to let the HTTP layer deal with the compression.
I’m sending JSON. If I set the content type to GZIP/deflate will the browser automatically compress it and then Apache with the deflate mod automatically decompress it so my application doesn’t have to think about the data being compressed at all?
I know it can work the other way around but any way to make it work this way?
Will the browser automatically gzip-encode your data for you? The short answer is no.
The long answer is that some user-agents can do things like this, but you definitely can’t rely on it. The apache mod_deflate docs state:
So, no, that’s not going to work. You’ll need to generate the appropriate HTTP request message yourself. The appropriate header in this case is
Content-Encoding: gzipand NOTContent-Type:because the content itself isapplication/json, you’re just looking to encode the entity body of your HTTP request message for transport.Note that you need to also add the appropriate
Content-Length:header specifying the size in bytes of the message entity body after compression -OR- send your HTTP message usingTransfer-Encoding: chunkedand forego the content-length specification.On the receiving end, you can instruct
mod_deflateto use an input filter to decompress the information:This is a bit heavy handed if you’re only receiving compressed message bodies for a couple of resources. Instead, you should probably just use the client-side script to check for the
Content-Encoding: gzipheader and decompress the request body manually. How to do this in say, PHP, is another question entirely. If you need details for that you should post another question.