Check out the new cool features in Sun Java
System Web Server 7.0 which can be downloaded for
free from
.
In this blog I will talk about dynamic compression of static files.
We have also implemented caching of compressed data
for static files. We have added a new service function
"compress-file" which will
compress static files (if the compressed file doesn't exist) and serves
it from the cache if the compressed version already exists.
Lets say if I want to create .gz files on the fly for static
files, all I have to do is to modify obj.conf as shown below. Use it
with
find-compressed SAF.
Add it before
send-file
function.
<Object
name="default">
... NameTrans fn="assign-name" from="*.html" name="find-compressed"
... Service method=(GET|HEAD|POST)
type=*~magnus-internal/* fn=compress-file subdir=".compressed-files"
Service method=(GET|HEAD|POST) type=*~magnus-internal/* fn=send-file
...
</Object>
<Object name="find-compressed">
PathCheck fn="find-compressed"
</Object> |
Note that subdir is a directory name only relative to the
directory in which the original
non-compressed file is located. "." means use the
same directory as the original file to create compressed files.
Parameters
this new
"compress-file" SAF takes are
subdir,
check-age(true), vary(true), compression-level(6), min-size(256),
max-size(1048576).
Let me take an example, if we have a static file in the docroot
static1.txt.
#
ls -al
-rwxr--r-- 1 root root 1386 Aug 1
21:16 static1.txt
Send a
GET request with
Accept-Encoding: gzip header,
it returns the compressed content,
#
telnet 0 2701
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
GET /static1.txt HTTP/1.0
Accept-Encoding:
gzip
HTTP/1.1 200 OK
Server:
Sun-Java-System-Web-Server/7
Date: Mon, 01 Aug 2005 15:47:11
GMT
Content-length: 892
Content-type: text/plain
Vary: accept-encoding
Content-encoding: x-gzip
Last-modified: Mon, 01 Aug 2005
15:47:11 GMT
Accept-ranges: bytes
Connection: close
z`B®(¼?øKä0¢TeÑB¨÷Q$A
....
O9êÓÌ
iñÂ6ì¹ ³Í§8z
ªè)óÍ6
We can verify that the Web Server creates a .gz file in
.compressed-files subdirectory.
# ls -la
drwxr-xr-x 2 webservd webservd
512 Aug 1 21:17 .compressed-files
-rwxr-xr-x 1 root root 1386 Aug 1
21:16 static1.txt
# ls -l .compressed-files/
total 2
-rw------- 1 webservd webservd
892 Aug 1 21:17 static1.txt.gz
Also note that the content length on access file is the same as the .gz
file in the
.compressed-files
directory.
#
tail ../logs/access
format=%Ses->client.ip% -
%Req->vars.auth-user% [%SYSDATE%] "%Req->reqpb.clf-request%"
%Req->srvhdrs.clf-status% %Req->srvhdrs.content-length%
abc.def.com - -
[01/Aug/2005:21:17:11 +0530] "GET /static1.txt HTTP/1.0" 200 892
...
This may be obvious, but never-the-less:
This requires that the document directories have write permission of UID that Web Server is running as. Lacking these permission will result in errors in the errors log indicating an inability to create the file structure.
How aggressive is Web Server in checking for freshness of the compressed file vs the uncompressed original?
Posted by Joe McCabe on February 27, 2007 at 07:45 AM IST #
Posted by Meena Vyas on March 06, 2007 at 02:16 PM IST #