Hiding 302 replies from clients
Artur Bergman
sky at crucially.net
Mon Aug 9 07:13:47 CEST 2010
if(bereq.status == 302) {
set req.url = bereq.http.Location;
restart;
}
Would this work?
On Aug 8, 2010, at 2:50 PM, Paul Millar wrote:
> Hi all,
>
> I've a question about whether something is possible with Varnish.
>
> Suppose the back-end replies with a 302 return code ("Found" or "Moved
> temporarily"). From a quick test, it seems that Varnish will relay
> this 302
> reply back to the client. The client will extract the new URL from
> the
> "Location" header field and make a second request.
>
> [aside: from a quick test, it seems that varnish always caches the
> 302 reply
> from the back-end. It will give the same reply if a client asks for
> the same
> URL, even when the back-end reply omits any "Cache-Control" or
> "Expires"
> header. If this is so then it's a bug.]
>
> What I'd like to happen is that, when receiving a 302 reply from the
> back-end,
> Varnish would attempt to fetch the data from the redirect URL (given
> in the
> "Location" header). Assuming the data is accessible from this URL
> then the
> client would obtain the data without being redirected.
>
> Is it possible to configure varnish to do this?
>
> In case you're wondering, here's why... Simplifying the setup
> somewhat,
> consider a distributed http service where a central server that
> knows about
> all the files but hosts none of the data. When a client requests a
> file, the
> central server redirects the client to whichever server is currently
> hosting
> that file by replying with a 302 reply. The client can read that
> file from the
> hosting server with the URL in the "Location" header.
>
> The redirect URL ("Location" header) is a single-use URL: subsequent
> attempts
> to use that URL will fail. Requests from the central server will
> generate a
> new single-use URL. Since 302 requests are non-cachable by default
> and
> conforming clients should make subsequent requests to the central
> server, this
> works.
>
> However, it does make caching awkward. The stored data does not
> change, so
> could be cached. However, if the client sees the redirect then the
> data would
> be cached against the single-use URLs, and subsequent requests for
> the same
> data wouldn't use the cached copy.
>
> Cheers,
>
> Paul.
>
>
> _______________________________________________
> varnish-dev mailing list
> varnish-dev at varnish-cache.org
> http://lists.varnish-cache.org/mailman/listinfo/varnish-dev
More information about the varnish-dev
mailing list