- 浏览: 211957 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
liminshaoye:
为什么我的一次成功之后就不能发送第二次了呢?
Java 使用SMSLib通过串口通讯收发短信 -
sziitjiang:
面试的题目,慢慢研究,还是能学到很多东西
JAVA 面试题 -
sziitjiang:
老大,我百度了一下SMG引擎,把你的博客给百度出来了!
SMG引擎 1.3.0 功能说明 -
jinkunaier:
,受教了!
深入探索SOAP1.1--使用SAAJ1.2.1 -
genggeng:
THX,对我入门很有帮助......
Java 使用SMSLib通过串口通讯收发短信
2009-05-18
使用gzip优化web应用(filter实现)
以前使用过filter,也就是屏蔽一下受限制的资源访问路径,解决下中文乱码问题,其实filter在优化web应用发面也有出色的应用,我们可以使用filter,结合gzip 压缩技术,解决web应用中网络传输数据量大的问题,一般使用了gzip压缩,网络的传输流量能减少40%作用,效果还是相当明显的.在工作中,gzip在企业级的应用中还不是很普遍,也许是程序员一开始想的就是sql优化,缓存等更直接有效的方式,而忽略了gzip压缩方法吧.
为什么要开启Gzip ?
gzip是http协议中使用的一种加密算法,客户端向web服务器端发出了请求后,通常情况下服务器端会将页面文件和其他资源,返回到客户端,客户端加载后渲染呈现,这种情况文件一般都比较大,如果开启Gzip ,那么服务器端响应后,会将页面,JS,CSS等文本文件或者其他文件通过高压缩算法将其压缩,然后传输到客户端,由客户端的浏览器负责解压缩与呈现。通常能节省40%以上的流量(一般都有60%左右),一些PHP,JSP文件也能够进行压缩。
那怎么开启呢?
Tomcat 开启Gzip :
1.找到Tomcat 目录下的conf下的server.xml,并找到如下信息
Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true"
将它改成如下的形式(其实在上面代码的下面已经有了,将他们打开而已。):
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 --> <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml" >
这样,就能够对html和xml进行压缩了,如果要压缩css 和 js,那么需要将
compressableMimeType=”text/html,text/xml”加入css和js:
<Connector port="8080" ......... compressableMimeType="text/html,text/xml,text/css,text/javascript" >
你甚至可以压缩图片:
compressableMimeType=”text/html,text/xml”加入css和js:
<Connector port="8080" ......... compressableMimeType="text/html,text/xml,text/css,text/javascript,image/gif,image/jpg" >
——开启后——–
开启后重启Tomcat ,通过浏览器查看headers信息就能看到是否开启(firebug中有),如果开启了,那么transfer-encoding就会是Gzip,否则就是chunked。
以上方式依赖了tomcat服务器的特性,如果你服务器是iis或者websphere那么还有不同的配置方式,下面我们使用filter,在代码级别完成web应用的gzip压缩的开启.
实现定制输出的关键是对HttpServletResponse 进行包装,截获所有的输出,等到过滤器链处理完毕后,再对截获的输出进行处理,并写入到真正的HttpServletResponse 对象中。JavaEE 框架已经定义了一个HttpServletResponseWrapper 类使得包装HttpServletResponse 更加容易。我们扩展这个HttpServletResponseWrapper,截获所有的输出,并保存到ByteArrayOutputStream 中
步骤:
1.Wrapper 用来包装HttpServletResponse 对象
Java代码
1.public class Wrapper extends HttpServletResponseWrapper
2.{
3. public static final int OT_NONE = 0, OT_WRITER = 1, OT_STREAM = 2;
4. private int outputType = OT_NONE;
5. private ServletOutputStream output = null;
6. private PrintWriter writer = null;
7. private ByteArrayOutputStream buffer = null;
8. public Wrapper(HttpServletResponse resp) throws IOException {
9. super(resp);
10. buffer = new ByteArrayOutputStream();
11. }
12. public PrintWriter getWriter() throws IOException {
13. if(outputType==OT_STREAM)
14. throw new IllegalStateException();
15. else if(outputType==OT_WRITER)
16. return writer;
17. else {
18. outputType = OT_WRITER;
19. writer = new PrintWriter(new OutputStreamWriter(buffer, getCharacterEncoding()));
20. return writer;
21. }
22. }
23. public ServletOutputStream getOutputStream() throws IOException {
24. if(outputType==OT_WRITER)
25. throw new IllegalStateException();
26. else if(outputType==OT_STREAM)
27. return output;
28. else {
29. outputType = OT_STREAM;
30. output = new WrappedOutputStream(buffer);
31. return output;
32. }
33. }
34. public void flushBuffer() throws IOException {
35. if(outputType==OT_WRITER)
36. writer.flush();
37. if(outputType==OT_STREAM)
38. output.flush();
39. }
40. public void reset() {
41. outputType = OT_NONE;
42. buffer.reset();
43. }
44. public byte[] getResponseData() throws IOException {
45. flushBuffer();
46. return buffer.toByteArray();
47.
48. }
49. class WrappedOutputStream extends ServletOutputStream {
50. private ByteArrayOutputStream buffer;
51. public WrappedOutputStream(ByteArrayOutputStream buffer) {
52. this.buffer = buffer;
53. }
54. public void write(int b) throws IOException {
55. buffer.write(b);
56. }
57. public byte[] toByteArray() {
58. return buffer.toByteArray();
59. }
60. }
61.}
public class Wrapper extends HttpServletResponseWrapper
{
public static final int OT_NONE = 0, OT_WRITER = 1, OT_STREAM = 2;
private int outputType = OT_NONE;
private ServletOutputStream output = null;
private PrintWriter writer = null;
private ByteArrayOutputStream buffer = null;
public Wrapper(HttpServletResponse resp) throws IOException {
super(resp);
buffer = new ByteArrayOutputStream();
}
public PrintWriter getWriter() throws IOException {
if(outputType==OT_STREAM)
throw new IllegalStateException();
else if(outputType==OT_WRITER)
return writer;
else {
outputType = OT_WRITER;
writer = new PrintWriter(new OutputStreamWriter(buffer, getCharacterEncoding()));
return writer;
}
}
public ServletOutputStream getOutputStream() throws IOException {
if(outputType==OT_WRITER)
throw new IllegalStateException();
else if(outputType==OT_STREAM)
return output;
else {
outputType = OT_STREAM;
output = new WrappedOutputStream(buffer);
return output;
}
}
public void flushBuffer() throws IOException {
if(outputType==OT_WRITER)
writer.flush();
if(outputType==OT_STREAM)
output.flush();
}
public void reset() {
outputType = OT_NONE;
buffer.reset();
}
public byte[] getResponseData() throws IOException {
flushBuffer();
return buffer.toByteArray();
}
class WrappedOutputStream extends ServletOutputStream {
private ByteArrayOutputStream buffer;
public WrappedOutputStream(ByteArrayOutputStream buffer) {
this.buffer = buffer;
}
public void write(int b) throws IOException {
buffer.write(b);
}
public byte[] toByteArray() {
return buffer.toByteArray();
}
}
}
2.过滤器
Java代码
1.public class GZipFilter implements Filter
2.{
3.
4. public void destroy()
5. {
6. // TODO Auto-generated method stub
7.
8. }
9.
10. public void doFilter(ServletRequest request, ServletResponse response,
11. FilterChain chain) throws IOException, ServletException
12. {
13. System.out.println("进入过滤器");
14. HttpServletResponse resp = (HttpServletResponse)response;
15. Wrapper wrapper = new Wrapper(resp);
16. chain.doFilter(request, wrapper);
17. byte[] gzipData = gzip(wrapper.getResponseData());
18. resp.addHeader("Content-Encoding", "gzip");
19. resp.setContentLength(gzipData.length);
20. ServletOutputStream output = response.getOutputStream();
21. output.write(gzipData);
22. output.flush();
23. }
24.
25. public void init(FilterConfig arg0) throws ServletException
26. {
27. // TODO Auto-generated method stub
28.
29. }
30.
31. private byte[] gzip(byte[] data) {
32. ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(10240);
33. GZIPOutputStream output = null;
34. try {
35. output = new GZIPOutputStream(byteOutput);
36. output.write(data);
37. }
38. catch (IOException e) {}
39. finally {
40. try {
41. output.close();
42. }
43. catch (IOException e) {}
44. }
45. return byteOutput.toByteArray();
46. }
47.
48.}
public class GZipFilter implements Filter
{
public void destroy()
{
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
System.out.println("进入过滤器");
HttpServletResponse resp = (HttpServletResponse)response;
Wrapper wrapper = new Wrapper(resp);
chain.doFilter(request, wrapper);
byte[] gzipData = gzip(wrapper.getResponseData());
resp.addHeader("Content-Encoding", "gzip");
resp.setContentLength(gzipData.length);
ServletOutputStream output = response.getOutputStream();
output.write(gzipData);
output.flush();
}
public void init(FilterConfig arg0) throws ServletException
{
// TODO Auto-generated method stub
}
private byte[] gzip(byte[] data) {
ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(10240);
GZIPOutputStream output = null;
try {
output = new GZIPOutputStream(byteOutput);
output.write(data);
}
catch (IOException e) {}
finally {
try {
output.close();
}
catch (IOException e) {}
}
return byteOutput.toByteArray();
}
}
3.在web.xml中配置 GZipFilter,当我们访问应用中以.html结尾的资源的使用,服务器端就开启http gzip压缩,将压缩后的信息通过http 协议传递给浏览器.
Xml代码
1.<filter>
2. <filter-name>ecsideExport</filter-name>
3. <filter-class>cn.com.xinli.test.GZipFilter</filter-class>
4. </filter>
5. <filter-mapping>
6. <filter-name>ecsideExport</filter-name>
7. <url-pattern>*.html</url-pattern>
8. </filter-mapping>
9.
<filter>
<filter-name>ecsideExport</filter-name>
<filter-class>cn.com.xinli.test.GZipFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ecsideExport</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
测试: 首先下载ieHttpHeader 插件.
测试地址:
http://localhost:9090/dwr/test.html
1.未开启http gzip 压缩
GET /dwr/test.html HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: localhost:9090
Connection: Keep-Alive
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
ETag: W/"5060-1242444154000"
Last-Modified: Sat, 16 May 2009 03:22:34 GMT
Content-Type: text/html
Content-Length: 5060
Date: Mon, 18 May 2009 12:29:49 GMT
2.开启http gzip 压缩
GET /dwr/test.html HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: localhost:9090
Connection: Keep-Alive
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
ETag: W/"5060-1242444154000"
Last-Modified: Sat, 16 May 2009 03:22:34 GMT
Content-Encoding: gzip
Content-Type: text/html
Content-Length: 837
Date: Mon, 18 May 2009 12:27:33 GMT
效果是非常明显的..........
使用gzip优化web应用(filter实现)
以前使用过filter,也就是屏蔽一下受限制的资源访问路径,解决下中文乱码问题,其实filter在优化web应用发面也有出色的应用,我们可以使用filter,结合gzip 压缩技术,解决web应用中网络传输数据量大的问题,一般使用了gzip压缩,网络的传输流量能减少40%作用,效果还是相当明显的.在工作中,gzip在企业级的应用中还不是很普遍,也许是程序员一开始想的就是sql优化,缓存等更直接有效的方式,而忽略了gzip压缩方法吧.
为什么要开启Gzip ?
gzip是http协议中使用的一种加密算法,客户端向web服务器端发出了请求后,通常情况下服务器端会将页面文件和其他资源,返回到客户端,客户端加载后渲染呈现,这种情况文件一般都比较大,如果开启Gzip ,那么服务器端响应后,会将页面,JS,CSS等文本文件或者其他文件通过高压缩算法将其压缩,然后传输到客户端,由客户端的浏览器负责解压缩与呈现。通常能节省40%以上的流量(一般都有60%左右),一些PHP,JSP文件也能够进行压缩。
那怎么开启呢?
Tomcat 开启Gzip :
1.找到Tomcat 目录下的conf下的server.xml,并找到如下信息
Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true"
将它改成如下的形式(其实在上面代码的下面已经有了,将他们打开而已。):
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 --> <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml" >
这样,就能够对html和xml进行压缩了,如果要压缩css 和 js,那么需要将
compressableMimeType=”text/html,text/xml”加入css和js:
<Connector port="8080" ......... compressableMimeType="text/html,text/xml,text/css,text/javascript" >
你甚至可以压缩图片:
compressableMimeType=”text/html,text/xml”加入css和js:
<Connector port="8080" ......... compressableMimeType="text/html,text/xml,text/css,text/javascript,image/gif,image/jpg" >
——开启后——–
开启后重启Tomcat ,通过浏览器查看headers信息就能看到是否开启(firebug中有),如果开启了,那么transfer-encoding就会是Gzip,否则就是chunked。
以上方式依赖了tomcat服务器的特性,如果你服务器是iis或者websphere那么还有不同的配置方式,下面我们使用filter,在代码级别完成web应用的gzip压缩的开启.
实现定制输出的关键是对HttpServletResponse 进行包装,截获所有的输出,等到过滤器链处理完毕后,再对截获的输出进行处理,并写入到真正的HttpServletResponse 对象中。JavaEE 框架已经定义了一个HttpServletResponseWrapper 类使得包装HttpServletResponse 更加容易。我们扩展这个HttpServletResponseWrapper,截获所有的输出,并保存到ByteArrayOutputStream 中
步骤:
1.Wrapper 用来包装HttpServletResponse 对象
Java代码
1.public class Wrapper extends HttpServletResponseWrapper
2.{
3. public static final int OT_NONE = 0, OT_WRITER = 1, OT_STREAM = 2;
4. private int outputType = OT_NONE;
5. private ServletOutputStream output = null;
6. private PrintWriter writer = null;
7. private ByteArrayOutputStream buffer = null;
8. public Wrapper(HttpServletResponse resp) throws IOException {
9. super(resp);
10. buffer = new ByteArrayOutputStream();
11. }
12. public PrintWriter getWriter() throws IOException {
13. if(outputType==OT_STREAM)
14. throw new IllegalStateException();
15. else if(outputType==OT_WRITER)
16. return writer;
17. else {
18. outputType = OT_WRITER;
19. writer = new PrintWriter(new OutputStreamWriter(buffer, getCharacterEncoding()));
20. return writer;
21. }
22. }
23. public ServletOutputStream getOutputStream() throws IOException {
24. if(outputType==OT_WRITER)
25. throw new IllegalStateException();
26. else if(outputType==OT_STREAM)
27. return output;
28. else {
29. outputType = OT_STREAM;
30. output = new WrappedOutputStream(buffer);
31. return output;
32. }
33. }
34. public void flushBuffer() throws IOException {
35. if(outputType==OT_WRITER)
36. writer.flush();
37. if(outputType==OT_STREAM)
38. output.flush();
39. }
40. public void reset() {
41. outputType = OT_NONE;
42. buffer.reset();
43. }
44. public byte[] getResponseData() throws IOException {
45. flushBuffer();
46. return buffer.toByteArray();
47.
48. }
49. class WrappedOutputStream extends ServletOutputStream {
50. private ByteArrayOutputStream buffer;
51. public WrappedOutputStream(ByteArrayOutputStream buffer) {
52. this.buffer = buffer;
53. }
54. public void write(int b) throws IOException {
55. buffer.write(b);
56. }
57. public byte[] toByteArray() {
58. return buffer.toByteArray();
59. }
60. }
61.}
public class Wrapper extends HttpServletResponseWrapper
{
public static final int OT_NONE = 0, OT_WRITER = 1, OT_STREAM = 2;
private int outputType = OT_NONE;
private ServletOutputStream output = null;
private PrintWriter writer = null;
private ByteArrayOutputStream buffer = null;
public Wrapper(HttpServletResponse resp) throws IOException {
super(resp);
buffer = new ByteArrayOutputStream();
}
public PrintWriter getWriter() throws IOException {
if(outputType==OT_STREAM)
throw new IllegalStateException();
else if(outputType==OT_WRITER)
return writer;
else {
outputType = OT_WRITER;
writer = new PrintWriter(new OutputStreamWriter(buffer, getCharacterEncoding()));
return writer;
}
}
public ServletOutputStream getOutputStream() throws IOException {
if(outputType==OT_WRITER)
throw new IllegalStateException();
else if(outputType==OT_STREAM)
return output;
else {
outputType = OT_STREAM;
output = new WrappedOutputStream(buffer);
return output;
}
}
public void flushBuffer() throws IOException {
if(outputType==OT_WRITER)
writer.flush();
if(outputType==OT_STREAM)
output.flush();
}
public void reset() {
outputType = OT_NONE;
buffer.reset();
}
public byte[] getResponseData() throws IOException {
flushBuffer();
return buffer.toByteArray();
}
class WrappedOutputStream extends ServletOutputStream {
private ByteArrayOutputStream buffer;
public WrappedOutputStream(ByteArrayOutputStream buffer) {
this.buffer = buffer;
}
public void write(int b) throws IOException {
buffer.write(b);
}
public byte[] toByteArray() {
return buffer.toByteArray();
}
}
}
2.过滤器
Java代码
1.public class GZipFilter implements Filter
2.{
3.
4. public void destroy()
5. {
6. // TODO Auto-generated method stub
7.
8. }
9.
10. public void doFilter(ServletRequest request, ServletResponse response,
11. FilterChain chain) throws IOException, ServletException
12. {
13. System.out.println("进入过滤器");
14. HttpServletResponse resp = (HttpServletResponse)response;
15. Wrapper wrapper = new Wrapper(resp);
16. chain.doFilter(request, wrapper);
17. byte[] gzipData = gzip(wrapper.getResponseData());
18. resp.addHeader("Content-Encoding", "gzip");
19. resp.setContentLength(gzipData.length);
20. ServletOutputStream output = response.getOutputStream();
21. output.write(gzipData);
22. output.flush();
23. }
24.
25. public void init(FilterConfig arg0) throws ServletException
26. {
27. // TODO Auto-generated method stub
28.
29. }
30.
31. private byte[] gzip(byte[] data) {
32. ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(10240);
33. GZIPOutputStream output = null;
34. try {
35. output = new GZIPOutputStream(byteOutput);
36. output.write(data);
37. }
38. catch (IOException e) {}
39. finally {
40. try {
41. output.close();
42. }
43. catch (IOException e) {}
44. }
45. return byteOutput.toByteArray();
46. }
47.
48.}
public class GZipFilter implements Filter
{
public void destroy()
{
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
System.out.println("进入过滤器");
HttpServletResponse resp = (HttpServletResponse)response;
Wrapper wrapper = new Wrapper(resp);
chain.doFilter(request, wrapper);
byte[] gzipData = gzip(wrapper.getResponseData());
resp.addHeader("Content-Encoding", "gzip");
resp.setContentLength(gzipData.length);
ServletOutputStream output = response.getOutputStream();
output.write(gzipData);
output.flush();
}
public void init(FilterConfig arg0) throws ServletException
{
// TODO Auto-generated method stub
}
private byte[] gzip(byte[] data) {
ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(10240);
GZIPOutputStream output = null;
try {
output = new GZIPOutputStream(byteOutput);
output.write(data);
}
catch (IOException e) {}
finally {
try {
output.close();
}
catch (IOException e) {}
}
return byteOutput.toByteArray();
}
}
3.在web.xml中配置 GZipFilter,当我们访问应用中以.html结尾的资源的使用,服务器端就开启http gzip压缩,将压缩后的信息通过http 协议传递给浏览器.
Xml代码
1.<filter>
2. <filter-name>ecsideExport</filter-name>
3. <filter-class>cn.com.xinli.test.GZipFilter</filter-class>
4. </filter>
5. <filter-mapping>
6. <filter-name>ecsideExport</filter-name>
7. <url-pattern>*.html</url-pattern>
8. </filter-mapping>
9.
<filter>
<filter-name>ecsideExport</filter-name>
<filter-class>cn.com.xinli.test.GZipFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ecsideExport</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
测试: 首先下载ieHttpHeader 插件.
测试地址:
http://localhost:9090/dwr/test.html
1.未开启http gzip 压缩
GET /dwr/test.html HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: localhost:9090
Connection: Keep-Alive
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
ETag: W/"5060-1242444154000"
Last-Modified: Sat, 16 May 2009 03:22:34 GMT
Content-Type: text/html
Content-Length: 5060
Date: Mon, 18 May 2009 12:29:49 GMT
2.开启http gzip 压缩
GET /dwr/test.html HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: localhost:9090
Connection: Keep-Alive
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
ETag: W/"5060-1242444154000"
Last-Modified: Sat, 16 May 2009 03:22:34 GMT
Content-Encoding: gzip
Content-Type: text/html
Content-Length: 837
Date: Mon, 18 May 2009 12:27:33 GMT
效果是非常明显的..........
发表评论
-
java对象的强引用,软引用,弱引用和虚引用
2017-03-09 23:36 297标签: javaoutofmemoryerror ... -
JAVA 中BIO,NIO,AIO的理解
2017-03-09 23:30 267JAVA 中BIO,NIO,AIO的理解 博客分类: 网络编 ... -
JAVA 中BIO,NIO,AIO的理解
2017-03-09 23:29 0博客分类: 网络编程 【转自】http://qindon ... -
诸葛亮为什么难以入围千古名相之列
2011-06-16 16:31 683诸葛亮为什么难以入围 ... -
windows 2003 密码的破解
2011-05-18 01:14 992windows 2003 密码的破解 ... -
解决Linux操作系统下Java的中文乱码问题
2011-03-04 10:57 855解决Linux操作系统下Java的中文乱码问题 关注Linu ... -
利用sethc.exe粘滞键文件破解密码进系统小健
2011-01-20 22:42 1372利用sethc.exe粘滞键文件破解密码进系统小健 发表于 系 ... -
windows 2003服务器创建隐藏账号以及清除隐藏账号的完美教程
2011-01-20 14:18 3621一.建立一个别人永远删不掉的管理员用户 操作步骤: ... -
ulimit 设置
2010-11-29 22:58 1580ulimit 设置(2009-08-21 15:17:16) ... -
浅析tomcat nio 配置
2010-11-29 20:49 951浅析tomcat nio 配置 Tomcat 6.X实现了J ... -
tomcat too open files ,solution
2010-11-28 19:28 6621) # ulimit -a core file size ( ... -
Tomcat [java.net.SocketException: Too many open files]解决方法
2010-11-28 14:26 1079主题: Tomcat [java.net.SocketExce ... -
Android开发者如何玩转应用开发
2010-11-26 12:27 714Android开发者如何玩转应 ... -
令人担忧的国内java开发现状
2010-11-25 22:20 89023 令人担忧的国内java开发现状 文章分类:Java编程 ... -
paypal在线支付的通信接口
2010-11-25 22:15 831paypal在线支付的通信接口 ★★★ 本篇为原创,需要引用转 ... -
终于搞定了Windows下Tomcat Web服务器的SSL配置
2010-11-25 17:05 1145终于搞定了Windows下Tomcat Web服务器的SSL配 ... -
QQ能上网页打不开的终极解决办法:用WinSock XP Fix修复2009-4-25
2010-06-01 09:31 4667现在某些垃圾网站 ... -
使用org.apache.commons.net.ftp包开发FTP客户端,实现进度汇报,实现断点续传,中文支持
2010-02-23 18:04 2382使用org.apache.commons.net.ftp包开发 ... -
axis2创建web service(一)
2009-09-22 17:22 637axis2创建w ...
相关推荐
Web应用防火墙关于gzip文件的检测研究.pdf
一个jar包,包含: 一个可用的GZIP Filter 一个可用的Cache Filter
实现web服务器中的gzip.docx
对网页中的gzip压缩格式数据进行解压的一些代码,尚未整理,很是凌乱。制作参考用哦。
针对ASP.NET页面实时进行GZIP压缩优化的几款压缩模块的使用简介及应用测试
java实现gzip ajax请求gzip压缩 等
文件和文件流操作,使用GZip解压文件。 您可以通过代码加压压缩的文档
第一个软件,传输流/文件的压缩,利用Internet中惯常使用的gzip, deflate算法,可以和sun java的GZipInputStream和GZipOutputStream互操作 第二个软件,基于HTTP的压缩传输软件,可完全和IE的VBScript和...
vue-element-admin 打包gzip压缩优化vue项目大小并部署到Nginx
busybox中gzip命令简单实现,可实现压缩存储,
大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中的网站时,服务器中的这个功能就将网页内容压缩后传输到来访的电脑浏览器中显示出来....
基于传统Web应用防火墙只能使用正则或语义分析的方式去匹配明文攻击特征的HTTP流量,而无法对服务器返回给客户端的压缩文件数据进行检测的目的,提出对WAF关于gzip压缩文件的检测研究思想,使得WAF在对服务器返回给...
该案例通过zlib实现gzip的压缩解压功能,包括解压gzip字符串、图片两个案例;提供了zlib1211的源码包和对应编译后生成的文件; 相应说明参考笔者博客:Qt笔记8--zlib实现gzip解压,链接...
web前端性能优化,主要是从加载优化、gzip压缩、减少DNS查询、gulp压缩打包 部分实现代码和前后效果对比图介绍
使用C语言编写的GZIP压缩及解压源代码
VC6 gzip 压缩解压 测试代码 使用gzip.dll windows2003自带的gzip库,用于网络数据传输的压缩解压,兼容目前所有的网络服务器
http web server c语言实现,兼容windows和linux,实现http web server的基本,支持gzip压缩
可以使用GZIP解压缩文件 代码用visual studio 2005编写 只需要改一点就可以用到你的程序中
gzip的Windows版,展开由gzip压缩的文件。gzip压缩文件有gzip.exe gzip.doc Readme Copying 四个子文件夹。 gzip 的Window版的gzip, 也就是gzip124xN.exe. 下载 gzip 的Window版的gzip, 也就是gzip124xN.exe。
单页应用会随着项目越大,导致首屏加载速度很慢!!!以下给出在下知道的几种优化方案 使用CDN资源,减小服务器带宽压力 路由懒加载 将一些静态js css放到其他地方(如OSS),减小服务器压力 按需加载三方资源,...