我有一个愿意输出gzip/deflated数据的Web服务.我已经验证该服务将使用原始JSON或使用wget和curl的gzip'd JSON进行响应.
我想使用jQuery AJAX调用来使用这个Web服务.
默认情况下,jQuery提供的$ .ajax调用不会添加"Accept-Encoding:gzip"HTTP请求标头,这是Web服务器使用gzip压缩数据进行响应所必需的.
但是,当我使用jQuery自己的方法添加标头时,例如:
$.ajax({url: 'http://foo.com/service.json',
beforeSend: function(xhr) {
console.log('xhr set');
xhr.setRequestHeader('Accept-Encoding', 'deflate')
}
});
Run Code Online (Sandbox Code Playgroud)
然后浏览器控制台中出现以下错误:
Refused to set unsafe header "Accept-Encoding"
Run Code Online (Sandbox Code Playgroud)
是否有可能强制jQuery为启用了gzip/deflate的URL进行AJAX调用?
如果没有,这是jQuery的缺点,还是AJAX更基本的东西?
我有一组(巨大的)类似的数据文件.该集合不断增长.单个文件的大小约为10K.每个文件都必须自己压缩.使用zlib库完成压缩,该库由java.util.zip.Deflater类使用.使用字典将字典传递给Deflate算法时setDictionary,我可以提高压缩率.
有没有办法(算法)找到'最佳'字典,即具有整体最佳压缩比的字典?
请参阅zlib手册
我使用以下.htaccess来设置gzip压缩:
AddOutputFilterByType DEFLATE text/html image/png image/jpeg text/css text/javascript
Run Code Online (Sandbox Code Playgroud)
请查看此网址:http://www.coinex.com/cn/silver_panda/proof/china_1984_27_gram_silver_panda_coin/
gzip压缩适用于html,css,js和jpg,但不适用于png(非常棒......)
我们最近将一些网站从deflate切换到gzip,并注意到我们的服务器上的CPU负载显着增加.
我听说过可以用来压缩json消息的MsgPack,但我有一个问题,为什么不简单地使用Gzip/Deflate而不是MsgPack?我认为调试也好.
假设有a.gz和b.gz.
$ gzip_merge a.gz b.gz -output c.gz
我想要这个节目.当然,
$ cat a.gz b.gz> c.gz
不起作用.因为a.gz的最终DEFLATE块具有BFINAL,而b.gz的GZIP头部.(请参阅RFC1951,RFC1952)但是如果你取消设置BFINAL,扔掉第二个GZIP标头并遍历第二个gzip文件的字节边界,你可以合并它.
事实上,我曾考虑为此事编写一个开源程序,但不知道如何发布它.所以我让Joel成为我的项目经理,我让他完成了我的解释和辩护,他终于理解了我想做的事,但说他太忙了.:(
当然,我可以自己写一个并尝试发布它.但我不能单独这样做,因为我的日常工作属于我雇主的财产.
有志愿者吗?我们可以作为程序员(我),出版商(您)或程序员(您),出版商(我).我需要的只是一些功劳.我曾经实现过RFC3320中描述的通用解压缩器虚拟机.所以我知道这是可行的.
或者,你可以指点那个程序.它对于管理日志文件非常有用,例如将365(天)gzip压缩日志文件合并为一个.;)
谢谢.
zlib中的函数deflate()和compress()函数有什么区别?
我查看了在线示例,其中一些使用了deflate而其他人使用了compress.
我该如何决定使用哪种情况?
java.util.zip.GZIPOutputStream没有为其底层的压缩级别提供构造函数参数或setter Deflater.
有办法解决这个问题,如所描述这里,例如:
GZIPOutputStream gzip = new GZIPOutputStream(output) {
{
this.def.setLevel(Deflater.BEST_COMPRESSION);
}
};
Run Code Online (Sandbox Code Playgroud)
我使用此GZIPped 10G文件,与使用预设相比,它的大小没有减少一位 DEFAULT_COMPRESSION.
这个问题的答案是,在某些情况下,设置级别可能无法按计划运行.为了确保,我还尝试创建一个新的:Deflater
this.def = new Deflater(Deflater.BEST_COMPRESSION, true);
Run Code Online (Sandbox Code Playgroud)
但是文件大小不会减少......
他们没有提供访问Deflater级别的原因吗?
或者上面的代码示例有问题吗?
deflater级别是否有效?
编辑:感谢您的评论.
文件可以进一步压缩吗?
它是一个UTF-8文本文件,使用默认压缩从10G压缩到10M.因此,在不知道压缩级别的细节的情况下,我估计它可以进一步压缩.
DEFAULT_COMPRESSION和之间的时差BEST_COMPRESSION?
我没有时间创造真正可靠的数据.但是我执行了每个压缩级别大约五次的代码,两者大约需要相同的时间(2分钟+/- 5秒).
文件大小gzip -v9?gzip创建的文件比java创建的文件小15KB.因此,对于我的具体用例,不值得再深入研究这个主题.
但是,上述三个基本问题仍然存在.有没有人使用更高的压缩级别成功减少文件GZIPOutputStream?
在可能的DEFLATE压缩级别[0 .. 9]中,哪一个Deflater.DEFAULT_COMPRESSION与Java完全对应?在Java源代码中,我将其视为public static final int DEFAULT_COMPRESSION = -1;
我想尝试使用java.util.zip中的Deflate和Inflate类进行zlib压缩.
我能够使用Deflate压缩代码,但在解压缩时,我遇到了这个错误 -
Exception in thread "main" java.util.zip.DataFormatException: unknown compression method
at java.util.zip.Inflater.inflateBytes(Native Method)
at java.util.zip.Inflater.inflate(Inflater.java:238)
at java.util.zip.Inflater.inflate(Inflater.java:256)
at zlibCompression.main(zlibCompression.java:53)
Run Code Online (Sandbox Code Playgroud)
这是我目前的代码 -
import java.util.zip.*;
import java.io.*;
public class zlibCompression {
/**
* @param args
*/
public static void main(String[] args) throws IOException, DataFormatException {
// TODO Auto-generated method stub
String fname = "book1";
FileReader infile = new FileReader(fname);
BufferedReader in = new BufferedReader(infile);
FileOutputStream out = new FileOutputStream("book1out.dfl");
//BufferedInputStream in = new BufferedInputStream(new FileInputStream(filename));
Deflater compress = new Deflater();
Inflater …Run Code Online (Sandbox Code Playgroud)