URLMap: why any-domain-routes have more priority than domain-specific-routes? #504

Closed
runa opened this Issue Jan 29, 2013 · 2 comments

2 participants

@runa

Heyas, we spent our afternoon trying to figure out if this is a bug or a feature.

We have 2 routes:

{
  "/" => app1,
  "http://example.com/x" => app2,
}

When requesting curl http://example.com/x the route for app1 matches (instead of the expected app2).

I think specific-domain-routes should be matched BEFORE any-domain routes. This could be easily fixed by setting INFINITY weight to any-domain routes instead of NEGATIVE_INFINITY (see https://github.com/rack/rack/blob/master/lib/rack/urlmap.rb#L15 ).

The problem, is that when we did that, (this test fails)[https://github.com/rack/rack/blob/master/test/spec_urlmap.rb#L113]. I couldn't understand why that test expects a response from default.org when requesting a URL http://foo.org/

So, the big question is: is this a bug or a feature?

There's a gist here displaying the behavior https://gist.github.com/4668565

Thanks a lot!

@raggi
Official Rack repositories member

Interesting, I see your issue, but it's not related to the priorities. Currently, we don't handle Hosts that aren't coming in from SERVER_NAME or HTTP_HOST headers. As a consequence of not having supported this previously (this may be related to the CGI spec, I need to do some research), Rack::MockRequest drops the host information during env creation.

@raggi
Official Rack repositories member

Fail. There are a few odd paths, but essentially, you're absolutely correct. Patch applied. Thank you!

@raggi raggi closed this in 60c66b5 Feb 7, 2013
@raggi raggi added a commit that referenced this issue Feb 8, 2013
@raggi raggi Fix a bug where host matching occurs out of order
 * Closes #504
3fc34cd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment