Firstly, it depends on how long you sent the expires header for the - day? A week? Month?
Regardless of when you set the expires header, you need to wait until this time reaches before the browser even starts communicating with the server for the new version. Thus, you will need to change the URL as others have indicated.
However, there is a good option for you, for the future ...
If you set 'cache-control: "no-cache, must-revalidate"' and a short expiration time, then the browser will check the server every time it wants to re-display the cached object using the request header "If-Modified-Since" for send the last timestamp that your server originally sent with this cached object to the" Last-Modified "response header. If the object is updated with a timestamp sent by the client, the server will send a new object and a new Last-Modified timestamp header . If not, it will only reply with the "304-Not Modified" response header.
Thus, the advantage of re-checking is that you still retain some bandwidth with little risk that the client is showing "obsolete" objects, but the disadvantage is that the client has to wait while your server checks the client. If-Modified-Since header versus the file "Last-Modified" timestamp and, of course, the server must actually check the file system to get this "Last Modified". Thus, all that was saved was the actual bandwidth of the content transfer and the transmission time.
Good reading resources :
source share