Hi Alex,
The important thing to differentiate here is what is being done by the server, and what is being done by the browser.
The first thing to check is whether or not the page is being resent from the server, or whether the browser is retrieving it from some cache.
If you watch the log on the server side, you'll see that there's no re-request from the browser (IE7 in this case). If you use FF you'll see there is a request - FF is behaving quite well.
So how does the browser "know" what to do? Well there are a variety of cache settings which determine whether a page should be refreshed or not. Here's a typical header sent by NetTalk. (aside: tip: you can see what nettalk sends by running debugview on the server, and compiling your program with the project define NETSHOWSEND=>1 )
HTTP/1.0 200 OK
Date: Mon, 21 Dec 2009 10:19:01 GMT
Server: NetTalk-WebServer/4.41
Expires: Sun, 21 Dec 2008 10:19:01 GMT
Content-Type: text/html
Cache-Control: no-store, no-cache, must-revalidate, private,post-check=0, pre-check=0, max-age=0
Pragma: no-cache
Connection: close
The key items in the header are the Expires date (which you'll notice is earlier than the current date), the Cache-Control setting (which in this case is perhaps hinting to the browser not to cache it) and the Pragme, which is perhaps the most explicit of all.
Bu do you think IE cares? Well no, just like in many other cases IE does what IE wants to do.
But wait, all is not lost.
It turns out that changing the first line from
HTTP/1.0 200 OK
to HTTP/1.1 200 OK
seems to make it work better.
As it happens NetTalk 5 uses HTTP 1.1 by default. And you can, if you like, set your app to use HTTP 1.1 in NetTalk 4. (Although I don't know if there are any side effects in NT4 - I don't know of any - but I don't know for sure.)
In NetTalk 4, in the web server procedure, right-click source, and search for the SetDefaultHeaderDetails method. AFTER the parent call add
self._Wait()
self.HeaderDetails.HTTP = 'HTTP/1.1'
self._Release()
That should help you.
cheers
Bruce