Explanation
When you open the image directly in the browser, it ends as an HTML document.
Go to google last doodle jpg, then open your HTML console ( http://www.google.com/logos/doodles/2013/erwin_schrdingers_126th_birthday-2002007-hp.jpg ).
In Chrome, you will get:
<html><body style="margin: 0px;"> <img style="-webkit-user-select: none" src="http://www.google.com/logos/doodles/2013/erwin_schrdingers_126th_birthday-2002007-hp.jpg"> </body></html>
This "packaging" is not performed for the src IMG tag that are inside the document.
Decision
If you intend to use only HTTP headers, you are stuck in multipart / x-mixed-replace described by @JamesHolderness, but pay attention to leaving HTTP connections open as this can damage your performance server and potentially open you up for a DDoS attack.
I was going to suggest using CSS animations / switching to lazy image loading. Unfortunately, only Chrome supports a background image (CSS property). Another option: display: no, because the image does not load until the element is displayed, but no browser supports animation or transition to the screen (CSS property).
Here only Chrome, only CSS solution http://jsfiddle.net/r2Tag/
HTML
<div id="thumbnail"></div>
CSS
#thumbnail { position: relative; width: 475px; height: 184px; background-image:url('http://lh3.ggpht.com/Z9Bl8P_zqvnB_FPBw5PqZlHelALdwWoBV5EZSEVI85kS698xDzghSmLzREcaS1Uh31L5PIRdAiuMUcBSNlBGCsc-9YshQaxnMA4uzU2c-Q'); animation: loadthumbnail 0s linear 10s; -webkit-animation: loadthumbnail 0s linear 10s; animation-fill-mode: forwards; -webkit-animation-fill-mode: forwards; } @keyframes loadthumbnail { to { width: 491px; height: 190px; background-image:url('https://www.google.com/logos/doodles/2013/erwin_schrdingers_126th_birthday-2002007-hp.jpg'); } } @-webkit-keyframes loadthumbnail { to { width: 491px; height: 190px; background-image:url('https://www.google.com/logos/doodles/2013/erwin_schrdingers_126th_birthday-2002007-hp.jpg'); } }
EDIT If you use SVG SVG data as the background image you need, you can bypass the Chrome parser for preloading the image.
SVG example
<svg x="0px" y="0px" width="491px" height="190px" viewbox="0 0 491 190" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink"><image externalResourcesRequired="true" xmlns="http://www.w3.org/2000/svg" x="0%" y="0%" height="100%" width="100%" xlink:href="https://www.google.com/logos/doodles/2013/erwin_schrdingers_126th_birthday-2002007-hp.jpg" xmlns:xlink="http://www.w3.org/1999/xlink"/></svg> background-image: url('data:image/svg+xml;base64,==');