About a year after the product launch we were contacted by a powerful washington based lobby group and they wanted to chat. They felt it violated a site visitor's "reasonable expectation of privacy". I agreed. So we pulled the feature and dodged a bullet as this "browser bug" hit the mainstream press a few months later. The feature wasn't a major part of our product's value prop, few of our customers used it and none missed it.
So if you're thinking about basing a startup on this, don't. You will get a call very quickly from organizations much larger than you are asking awkward questions.
Note that it doesn't need to be 100% accurate to be effective. If it guesses better than 50% (i.e. coin flip), then it could be used to give guesses with at least some confidence. No different than analyzing any other noisy dataset. Because this all works client-side, it can also be done quite invisibly.
http://ajaxian.com/archives/spyjax-using-avisited-to-test-yo...
https://grepular.com/Abusing_HTTP_Status_Codes_to_Expose_Pri...
Although, the Google test on that page is currently broken. The Facebook and Twitter ones aren't.
Seems like i'm 50% male 50% female :D
Best of luck, it's an interesting concept!
If I re-run the test it still gets some sites wrong (says I haven't visited them when in fact I have). It even claims I haven't visited Amazon both times when in fact it's open in another tab.
It seems to work better on slower internet connections. The script returns calls a site "visited" if the response time of the potentially cached image is less than 1/20 the time of the certainly uncached image.
On slow connections the cache is much faster than the uncached. On fast connections it's only slightly faster. However, the known uncached images sometimes have "10x increase in latency" so it seems that based on my (and other's experience) that this is a major problem.
One could attempt to normalize this for the sites where appending random query string causes higher latency. Simply precalculate the added latency from images with the random query string on a per site basis. Then subtract it from "uncachedTime."
Screenshot: http://cl.ly/1i0921270W2b1u190b0W
facebook: 'https://s-static.ak.facebook.com/rsrc.php/v1/yJ/r/vOykDL15P0R.png',
twitter: 'https://twitter.com/images/spinner.gif,
digg:http://cdn2.diggstatic.com/img/sprites/global.5b25823e.png,
reddit: 'http://www.redditstatic.com/sprite-reddit.pZL22qP4ous.png,
hn: 'http://ycombinator.com/images/y18.gif,
stumbleupon: 'http://cdn.stumble-upon.com/i/bg/logo_su.png,
wired: 'http://www.wired.com/images/home/wired_logo.gif,
....I do use NoScript and Ghostery, though, and I could see how that might cause some false negatives.
Running in Chrome's incognitive mode is a bit different though. only 7 show up cached the first time its run.
But don't despair, I have one of the most hostile browser settings. I have RequestPolicy, NoScript,and Flashblock.
That's probably due to me blocking facebook and twitter widgets on sites other than Fb and twitter though.
I wonder if the use of ghostery, no-script, that sort of thing, is what bamboozles it? Overall, it looks like it's guessing.
Several others it said I didn't visit but I did.
And it said I visited linkedin, and I didn't.
For all the entries I got "not visited", even though I visit a lot of them.
Ran it again, ALL of them appeared visited. Even sites like abebooks, which I have not visited at all.