Re: [Simpleweb-Support] HTTP Compression
Brought to you by:
niallg
From: Brian D. <wic...@gm...> - 2005-12-14 19:51:27
|
Hmm... can't seem to get this to work.. also a couple things bother me... first.. in order to do it this way I won't be able to set the content-length because whatever i set would be wrong.. also.. compression should be handled at the framework level if possible.. so.. I was really just wondering why it wasn't supported... out of the box per-se anyway.. thanks for the help! /Brian On 12/13/05, Brian Davis <wic...@gm...> wrote: > Hey cool.. I will look at this in a day or two and let you know how it > goes.. did you guys do anything with deflate or just gzip? > > /Brian > > > On 12/13/05, Christophe Roudet <cr...@ac...> wrote: > > I have done this with a custom ProtocolHandler: > > > > public class ServerHandler implements ProtocolHandler { > > private ProtocolHandler _handler; > > private static final Logger _logger =3D > > Logger.getLogger(ServerHandler.class); > > > > // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > // Constructor > > // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > > > public ServerHandler(ProtocolHandler handler) { > > _handler =3D handler; > > } > > > > // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > // Public methods > > // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > > > public void handle(Request req, Response resp) { > > resp.set("Server", "Simple"); > > resp.setDate("Date", System.currentTimeMillis()); > > // check for compressed request > > String contentEncoding =3D req.getValue("Content-Encoding"); > > if ((contentEncoding !=3D null) > > && (contentEncoding.toLowerCase().indexOf("gzip") > -1)) { > > _logger.debug("Request is zipped."); > > req =3D new GZipRequest(req, SimpleWeb.BUFFER_SIZE); > > } > > // does the client accept compressed response? > > String acceptEncoding =3D req.getValue("Accept-Encoding"); > > if ((!"GET".equals(req.getMethod())) && (acceptEncoding !=3D null) > > && (acceptEncoding.toLowerCase().indexOf("gzip") > -1)) { > > _logger.debug("Response will be zipped."); > > resp =3D new GZipResponse(resp); > > } > > /* > > * Hand the request over to the real server so that targeted servic= e can > > be > > * executed. > > */ > > _handler.handle(req, resp); > > } > > } > > > > -------------------- > > And the GZipRequest and GZipResponse are mainly a wrapper on a request = where > > stream getter methods return a GZIP stream: > > > > > > public class GZipRequest implements Request { //extends FilterRequest { > > private int _size; > > private Request _req; > > > > // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > // Constructor > > // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > > > /** > > * Wraps the specified request stream into a GZipStream. > > */ > > public GZipRequest(Request request, int size) { > > //super(request); > > _req =3D request; > > if (size <=3D0) { > > _size =3D 2048; > > } else { > > _size =3D size; > > } > > } > > > > // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > // Public methods > > // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > > > /** > > * Returns a GZIPInputStream. > > */ > > public InputStream getInputStream() throws IOException { > > return new GZIPInputStream(_req.getInputStream(), _size); > > } > > > > /** > > * This can be used to get the URI specified for this HTTP > > * request. This corresponds to the /index part of a > > * http://www.domain.com/index URL but may contain the full > > * URL. This can be set using <code>setURI</code>. > > * > > * @return the URI that this HTTP request is targeting > > */ > > public String getURI(){ > > return _req.getURI(); > > } > > > > /** > > * This can be used to set the URI for this HTTP request. > > * The <code>getURI</code> will return the String entered > > * which can be a full HTTP URL or a relative path URL. > > * > > * @param uri the URI that this HTTP request is to use > > */ > > public void setURI(String uri){ > > _req.setURI(uri); > > } > > > > /** > > * This can be used to get the HTTP method for this > > * request. The HTTP specification RFC 2616 specifies the > > * HTTP request methods in section 9, Method Definitions. > > * > > * @return the request method for this request > > */ > > public String getMethod(){ > > return _req.getMethod(); > > } > > > > ... > > > > ------------------ > > > > public class GZipResponse implements Response { //extends FilterRespons= e { > > private Response _resp; > > > > // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > // Constructors > > // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > > > /** > > * Creates a GZipResponse for the specified Response. > > */ > > public GZipResponse(Response response) { > > //super(response); > > _resp =3D response; > > _resp.set("Content-Encoding", "gzip"); > > } > > > > // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > // Public methods > > // =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > > > /** > > * Returns a GZIPOutputStream. > > * @see simple.http.Response#getOutputStream() > > */ > > public OutputStream getOutputStream() throws IOException { > > return new GZIPOutputStream(_resp.getOutputStream()); > > } > > > > /** > > * Returns a GZIPOutputStream. > > * @see simple.http.Response#getOutputStream(int) > > */ > > public OutputStream getOutputStream(int size) throws IOException { > > return new GZIPOutputStream(_resp.getOutputStream(size), size); > > } > > > > /** > > * Returns a GZIPOutputStream wrapped into a PrintStream. > > * @see simple.http.Response#getPrintStream() > > */ > > public PrintStream getPrintStream() throws IOException { > > return getPrintStream(); > > } > > > > /** > > * Returns a GZIPOutputStream wrapped into a PrintStream. > > * @see simple.http.Response#getPrintStream(int) > > */ > > public PrintStream getPrintStream(int size) throws IOException { > > return new PrintStream(getOutputStream(size), false); > > } > > > > /** > > * This represents the status code of the HTTP response. The HTTP > > * response code represents the type of message that is being sent > > * to the client. For a description of the codes see RFC 2616 > > * section 10, Status Code Definitions. > > * > > * @return the status code that this HTTP response has > > */ > > public int getCode(){ > > return _resp.getCode(); > > } > > > > /** > > * This method allows the status for the response to be changed. > > * This must be reflected the the response content given to the > > * client. For a description of the codes see RFC 2616 section > > * 10, Status Code Definitions. > > * > > * @param code the new status code for the HTTP response > > */ > > public void setCode(int code){ > > _resp.setCode(code); > > } > > > > .... > > > > Christophe > > > -----Original Message----- > > > From: sim...@li... [mailto:simpleweb= - > > > sup...@li...] On Behalf Of Brian Davis > > > Sent: Tuesday, December 13, 2005 10:20 AM > > > To: sim...@li... > > > Subject: [Simpleweb-Support] HTTP Compression > > > > > > Is there any plans to support gzip or deflate.. or is it there and I > > > am not finding it.. also.. if not why? and.. if not.. any recommends > > > on where to add it.. > > > > > > thanks! > > > > > > Brian > > > > > > > > > ------------------------------------------------------- > > > This SF.net email is sponsored by: Splunk Inc. Do you grep through lo= g > > > files > > > for problems? Stop! Download the new AJAX search engine that makes > > > searching your log files as easy as surfing the web. DOWNLOAD SPLUN= K! > > > http://ads.osdn.com/?ad_idv37&alloc_id=16865&op=3Dick > > > _______________________________________________ > > > Simpleweb-Support mailing list > > > Sim...@li... > > > https://lists.sourceforge.net/lists/listinfo/simpleweb-support > > > > > > > > > > > > ------------------------------------------------------- > > This SF.net email is sponsored by: Splunk Inc. Do you grep through log = files > > for problems? Stop! Download the new AJAX search engine that makes > > searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! > > http://ads.osdn.com/?ad_idv37&alloc_id=16865&opclick > > _______________________________________________ > > Simpleweb-Support mailing list > > Sim...@li... > > https://lists.sourceforge.net/lists/listinfo/simpleweb-support > > > |