You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by "Christopher Dodunski (Tapestry)" <Ch...@christopher.net.nz> on 2024/10/05 04:07:12 UTC

Tapestry + ETag headers

Hello all,

I’m exploring the possibility of adding ETag headers to images my 
Tapestry application is serving, to help improve performance on slower 
networks.

It seems that Apache Server automatically adds ETag headers to images 
sourced from static files (Tapestry @Asset), but not when Tapestry 
dynamically generates an image from a database BLOB (and without file 
extension, eg. .png).

Essentially, the app would need to return a “304 Not Modified” in 
response to a conditional If-None-Match request from the client, if the 
image hadn’t changed.

I couldn’t find anything about this in the Tapestry docs, and am 
wondering how others might have implemented ETag headers within their 
Tapestry applications.

Kind regards,

Chris.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Tapestry + ETag headers

Posted by Ben Weidig <be...@netzgut.net>.
Hi Chris!

Tapestry's AssetDispatcher/ResourcerStreamer does ETag for assets:

https://github.com/apache/tapestry-5/blob/b01afbedb325897084ab5f2277e99a0e6fe2a02f/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ResourceStreamerImpl.java#L156-L171

You could implement the BLOB-based images as assets, so it will use that
system, too.
We went that route for SCSS support in our applications.

You'd require a custom AssetFactory and AssetRequestHandler.
If you look at the implementations Tapestry has, it's not that complicated.
Then, you'd contribute the factory to AssetSource, and the RequestHandler
to Dispatcher with the @AssetRequestDispatcher annotation.

I think that should do it.

Alternatively, you could use an HttpServletRequestFilter, but you would
need to do all the ETag logic/handling yourself.
And you'd lose everything Tapestry brings to the table for assets, like
referencing them via prefix and automatic URL generating, etc.

Cheers
Ben

On Sat, Oct 5, 2024 at 6:07 AM Christopher Dodunski (Tapestry) <
ChrisFromTapestry@christopher.net.nz> wrote:

> Hello all,
>
> I’m exploring the possibility of adding ETag headers to images my
> Tapestry application is serving, to help improve performance on slower
> networks.
>
> It seems that Apache Server automatically adds ETag headers to images
> sourced from static files (Tapestry @Asset), but not when Tapestry
> dynamically generates an image from a database BLOB (and without file
> extension, eg. .png).
>
> Essentially, the app would need to return a “304 Not Modified” in
> response to a conditional If-None-Match request from the client, if the
> image hadn’t changed.
>
> I couldn’t find anything about this in the Tapestry docs, and am
> wondering how others might have implemented ETag headers within their
> Tapestry applications.
>
> Kind regards,
>
> Chris.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>