I've worked around my problem. To recap, when the Standalone Pocket
PC Flash Player executes a loadMovie() for a file it has loaded before,
it includes bogus Range, Unless-Modified-Since and If-Range headers in
the request. Again, here's the bogus request:
> GET /flash/main.swf HTTP/1.1\r\n
> Referer: http://server/flash/main.swf\r\n
> Range: bytes=2964-\r\n
> Unless-Modified-Since: Mon, 23 Jun 2003 13:51:51 GMT\r\n
> If-Range: "11f8ea-b94-c6c42bc0"\r\n
> User-Agent: Shockwave Flash\r\n
> Host: server\r\n
> \r\n
Properly-configured web servers respond to this with a 416 code
("Requested Range Not Satisfiable"), which aborts the load of the movie.
This is a Flash bug: it should not ask for a range when requesting the
movie. (Some web servers respond by sending the requested movie anyway;
although this dodges the Flash bug it isn't the correct behavior).
My server is Apache version 2.0.44. To work around the problem, I added
the following lines to a .htaccess file in the directory holding the
Flash files:
RequestHeader unset Range
RequestHeader unset If-Range
RequestHeader unset Unless-Modified-Since
This deletes the three offending headers before Apache can try to
process them. Apache then sends the movie back to Flash, and everyone's
happy. The only problem is that this disables all caching of movies, so
that every time my application asks for a movie it will have to come
over the network again. Slower, but far better than being unreliable. (I
considered rewriting the Unless-Modified-Since header into an
If-Modified-Since header using mod-perl, but the logistics of this
ballooned into impracticality.)
Thanks for the help,
Dan
--
Daniel T. Griscom Work: (781) 665-0053
Suitable Systems Fax: (781) 665-7106
152 Cochrane Street
griscom@suitable.com
Melrose, MA 02176-1433
http://www.suitable.com/