Oliver Nassar

new Image() in Chrome doesn't include referrer header

December 12, 2010

Ran into a weird bug after IMDB presumably did an update to the way their static content is served.

When pinging an image from JS via the Image object, Chrome seems to exclude the referrer header, where as Firefox includes it. The result?

Well depending on how the server you're hitting is configured, you might get rejected (or in my case, a 403). I ran into this problem with my page scraper. I have a link tool on this site whereby I throw in a link, and it scrapes the content, including the open-graph meta tags found in the source.

I was grabbing the open-graph meta tag og:image so that I could grab an image off the site. In order to do this, I make a call via ajax which hits my PHP backend. It then scrapes the page, and returns the value of the og:image tag. To ensure that it's a valid image, however, I load it on the client-side via a new Image() statement. This lets met check the width/height of the presumed image, ensuring that it's legit.

It loads beautifully in Chrome like it always did, but in Firefox, which is sending along a referrer header, it doesn't. I'm guessing Amazon/IMDB is doing this to prevent people like me from scraping their content (although I don't think I'm doing it in a malicious-way at all).

Odder-still is that Facebook is doing the same thing, and it still seems to work there. I'm guessing they have an exception set up for them (boo).