I have some thoughts on this method.  ```cacheable?``` was already defined in this class so this is food for thought in any additional/future changes you make, but looking at it now it is obvious it doeesn't belong here, even though it has 'cache' in the name for several reasons:

1. It does not rely on any state of the Cache class or object.
2. All state required for the logic defined in this method is either passed in (see [here](https://github.com/centro/puffing-billy/blob/8f227f6775c87ceb0d1b4d60d83216bf70480a92/lib/billy/proxy_connection.rb#L149)), or farmed out to static Helper methods.
3. cacheable? is really an operation on a request/response that can be cached, not on the cache object itself.

Therefore, I would say both this and the ```cacheable_status?``` methods really belong somewhere else where the object state being evaluated (e.g. the request/response to be cached lives).  This would eliminate at least one of the parameters being passed into this method.

At a glance, the proxy_connection class appears to the most sensible initial refactoring target for these methods. Refactoring these into the proxy_connection class yields the following call, eliminating having to pass in the URL which is already an instance variable in that class:

```ruby
if cacheable?(res_headers, res_status)
```