IMPOSSIBLE: Netscape ANIM flaw w/ Expire + GMT flaw

I have a banner rotation program, via a CGI-Perl script. A call is made to the ad script from my HTML webpage with the source: <img src="cgi-bin/nph-ads.cgi" width=468 height=60>

The script returns back the appropriate ad with the HTTP headers:
Last-Modified: Fri, 11 Sep 1998 01:54:00 GMT
Date: Fri, 11 Sep 1998 01:50:00 GMT
Expires: Fri, 11 Sep 1998 01:55:00 GMT
The graphic banners returned are mostly GIF anims.  
Strangely, when the GIF Anim banner has hit it's expired time (01:55), for "some reason" Netscape makes a call to the CGI script again and fetches another banner from it.  However, a non-animating banner doesn't do such a thing.

Sure the banner has expired and so doesn't exist in the cache anymore but I don't understand why Netscape makes that  automatic call to the cgi script; I didn't do anything but sit there and watch the GIF anim?  Is this a bug with Netscape and does this occur in IE?

One other question. The HTTP Header, Expires, which I send back is of course in GMT;  GMT is only good for establishing a universal "hour" between server and client.  The minutes, on the other hand, is established by using the client's minutes of the hour.  So if the client's time is: 04:30am, then the GMT time could be 00:30, where the 30 was established by the client's minutes.

Now as you can see from my output HTTP headers, my banners expire in 5 minutes from the time it was dished out to the client. So if the server time was 04:26 am then the Expires header will be set to expire at 04:31am.  

Now Netscape will "expire" the item once it has matched or exceeded the established Expires time from the server. Netscape's expire system appears to be based on the client's present time.  So if the client's time were 04:30am then the item will expire in 1 minute rather than the "full" 5 minutes.

Is there ANYWAY to be assured that the banner won't expire until the established time?

Thanks for help you can provide!
Who is Participating?
mouattsConnect With a Mentor Commented:
The call to the CGI is made because when an animated gif starts its cycle Netscape simply re-reads the image. In doing so it refers to the cached entry in the way it would do normally. As in you case it finds that the image has expired it it calls the CGI again to get a fresh image.

This isn't really a bug within Netscape it is meant to operate in this way generally.

Possible one could argue that it shouldn't make the reference to the cache (in these circumstance) but as it does it means that we have a choice of refreshing them as you system does or maintaining as wholly static (ie using a long expiry date) or always pulling from the server (by using the no-cache header).

The answer to your second question is no. The only way this could be achieved is if the HTTP header contained a relative time (eg expire in minutes time). Then the browser could calculate the actual time (in respect of its clock) the the expiry occurs. Unfortunatly the HTTP standard specifies that the date within the header MUST be absolute. Bear in mind that the browser only has access to the local clock and not the servers.

Having said that it is possible to synchronise a client clock to a servers clock. To do this you need a program that can access the servers TIME service and then set the time on the client based on the returned value. I suspect that for what you are doing this would not be appropriate.


anistonAuthor Commented:
Just out of curiosity how would I go about in setting the client's minutes with the server's minutes?  Can Javascript maybe check the expire date or something and just use its SETMINUTES command?

Thanks for a great answer
Unfortunatly you don't have access to the expire time from Javascript and if you did I think you would find that it would be read only in the same way as the last modified date (which you can access).

To change the clients minutes as I mentioned previously requires a program that is initiated by the client. Typically some internet suites such as Turnpike include such a feature that allows clocks to synchronize but importantly it is the client that starts things off. (I was using such a beast at one time until the clock on my ISP went haywire and set my PC clock forward several days).

However if you are using Javasscript you can rotate you advert using this. To do this you execute some javascript using the onLoad event. This code should load your additional images in and then use Window.setTimeout to setup a call to another function with your five minute timeout. When this second function is called  it should swap the image (and href if click thrus are in use) to the a previsouly loaded image and then call setTimeout again for the next rotation.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.