IMPOSSIBLE: Netscape ANIM flaw w/ Expire + GMT flaw

Posted on 1998-09-10
Last Modified: 2013-12-25
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!
Question by:aniston
  • 2
LVL 11

Accepted Solution

mouatts earned 100 total points
ID: 1828613
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.



Author Comment

ID: 1828614
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
LVL 11

Expert Comment

ID: 1828615
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.


Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Most of the sites are being standardized with W3C Web Standards. W3C provides lot of web standard services to the web. They have the web specification, process and documentation for all the web standards. You can apply HTML, CSS and Accessibility st…
I will show you how to create a ASP.NET Captcha control without using any HTTP HANDELRS or what so ever. you can easily plug it into your web pages. For Example a = 2 + 3 (where 2 and 3 are 2 random numbers) Session("Answer") = 5 then we…
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)
In this fifth video of the Xpdf series, we discuss and demonstrate the PDFdetach utility, which is able to list and, more importantly, extract attachments that are embedded in PDF files. It does this via a command line interface, making it suitable …

706 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now