What you're looking for is a way to re-try requests in the case where the server is unreachable, which is not something that HTTP or the browser gives you automatically. If you had a proxy, but the server itself was down, the proxy would likely return a 503 service unavailable status, which the client could use to retry until the service was available (which might only happen for a certain number of seconds or a certain number of tries). It might also be possible for a proxy to wait and retry the upstream server until it was available, but I can't think of a proxy right now with that feature.
HTTP itself doesn't have a timeout feature at all either. The timeout that you're setting on the client side is a simple GWT Timer, if the request hasn't finished (either in success or failure), it cancels the upstream request and presents the failure you're seeing to the client.
Be a little careful when implementing a retry mechanism, as it is possible that the call made it to the server, and the server performed the action, but the client lost internet connection while the response was on its way to the client - that is, retrying a non-idempotent or expensive action may cause problems you weren't expecting. A status code of 0 is usually the client's way of saying "I wasn't able to get any reply from the server for some reason" - taking that information and trying to do something simple and idempotent until a server connection can be reestablished lets you know that the server and network are both working again, followed by some "did my last action succeed" before trying again (or just let the user dismiss the message and try again) will help mitigate this class of issues. A proxy sending back a 503 is a safer way to be sure that the network connection is good, but only the server is down, so you can retry - but be aware that technically there might be a network issue between the proxy and server, though this is much less likely.
Good luck,
Colin