rtomayko/rack-cache — pull request #93 by jamesruston (2013-12-09 10:54:50+00:00)
Title: Not invalidating the cache for preflight CORS request

When making a CORS (http://www.w3.org/TR/cors/) request, first a preflight OPTIONS request is sent to ensure the request is valid. Once receiving a response from the OPTIONS request the real request is then made (so long as the OPTIONS response confirmed its validity) e.g.

some-origin sends => OPTIONS /foo/bar to some-other-origin
some-origin is allowed access to some-other-origin
some-origin sends => GET /foo/bar to some-other-origin

Currently the OPTIONS request is invalidating the /foo/bar cache and is rendering the cache useless for cross origin requests, such as using an AngularJS front end with a Sinatra JSON API.

I've put together a simple solution which checks for OPTIONS requests before invalidating the cache. The OPTIONS response isn't cached and is always passed.