FWIW, RC7 compiles fine on my MacBook Pro 10.4.8 with default Perl. Not surprising. Anyway, I wanted to discuss the Gofer http transport, where it relates to caching.

In order to add seamless integration of a caching engine (squid, Redline accelerator, etc...), there are some issues.

First, POST requests are never cached by Squid, and probably not by most other engines. POST is generally a "write", so no accelerator likes caching them. I suggest that the http transport take that into account, and allow for passing a driver parameter with the statement handle that specifies a POST or a GET (default should probably be POST, it's safer, see below). The related DBI mod_perl transport handler would only need a simple test of the method type to decide how to extract the data.

Second, it would be nice to manage via the statement handle parameters the http transport's headers. Some implementations might allow a client to bypass a caching engine by setting the correct headers.

So basically, I guess some kind of way to pass in transport parameters via the sth should be codified. I see in the TODO section "Driver-private sth attributes - set via prepare() - change DBI spec", so that's probably what you were thinking.

There are ways around this if we're stuck without sth-based driver parameters, by creating different read dbh's and write dbh's. Technically that's probably the better way to go for a large scale system, but I can see it confusing the smaller user.

Anyway, regarding GET and POST: POST is safer because it's guaranteed to work, but it'll never be cached. GET works at least for a 2,048 character url, and potentially up to 8,000 characters, but you never know what middleware device might truncate it. To compound the problem, in order to be safe one would have to uri_encode_utf8() the query string, which willl potentially bloat it even more.

So the question is... how big is a standard Gofer request package?

H

Reply via email to