Keeping a local disk-based cache of online resources (facebook images)

So, I’ve tried StackOverflow and the facebook dev forum but no-one seems to be helping thus far. :’(

I must admit I could probably have done some more thorough research myself, but it seems like something that someone with the appropriate knowledge might be able to recognise and explain relatively easily (I hope). I suppose if it was all that simple, someone in SO would probably have chimed in.

I’m doing some stuff with facebook which means that I want to keep a cache of pictures. I thought that it should be correct to just use URLConnection.setIfModifiedSince() before connecting and then check for a 304 return code, but it seems facebook is using some other HTTP headers rather than last-modified to control caching and in my brief searches I haven’t found anything that really helps me understand what or why. I’m pretty naive when it comes to the nitty-gritty of HTTP, but looking at request details in Chrome’s network monitor I see various X-* headers which appear to be relevant…

More details can be found on the Stack Overflow question, any help here or over there much appreciated.

It sounds like you are talk about the cacheing in a browser. For this you should do a search for “HTTP” & “Cache-Control”. You can start here: http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html

If you have an application and you want to cache, just save everything to disk using javax.imageio.ImageIO.

I’m not talking about the caching in a browser, but rather implementing something similar in my own program (otherwise, I could just let the browser get on with managing its cache and probably not have to worry about it). Thanks for the link though, that’s probably what I should have read before.

I suppose my problem is probably to do with the indirection introduced eg
http://graph.facebook.com/ptr.tdd/picture
gets resolved to
http://profile.ak.fbcdn.net/hprofile-ak-snc4/161662_893825106_733414_q.jpg

Still haven’t really looked into this all that properly.

@Eli, many thanks for the reply; ImageIO might be just the ticket.

If you want to cache it within your program, and have the program update after a certain amount of time, you should look into the caching frameworks, such as http://ehcache.org/