Generally you can't do it without server-side help. Usually you'd rely on the server generating thumbnails for you. There are image conversion proxy servers that will download the full image server-side, and serve a resized version to you.
Without any sort of server-side resizing, the options are limited and not very good.
If the image is in progressive/interlaced format then you can download only part of the file, but that will be a low-quality approximation.
Unfortunately you can't know how much data you'll need in advance, so your best bet is to either request entire image and close the TCP/IP connection when you see you've got enough data (hopefully [NSURLConnection cancel]
does that) .
Or you could download some arbitrary small amount of data using HTTP Range
request and then estimate how much more you need to download (it might save some bandwidth, but it will cost you latency).
I'm not aware of anything in iOS SDK that would let you inspect how many progressive scans of a partially-downloaded JPEG file you've got, so you might need to get your hands dirty with libjpeg or your own JPEG parsing.
But really it'd be easier if you could download entire image server-side and generate a proper thumbnail for it.