Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

host() returns undefined if URL is 'localhost' #2

Open
srw opened this issue Feb 4, 2012 · 13 comments
Open

host() returns undefined if URL is 'localhost' #2

srw opened this issue Feb 4, 2012 · 13 comments
Labels

Comments

@srw
Copy link

srw commented Feb 4, 2012

var url = new URL('localhost')
url.host()
undefined

@ericf
Copy link
Owner

ericf commented Feb 7, 2012

This is intentional. There is no way to know whether this is representative of a hostname or path.

Imagine a current URL of: http://example.com/ with a link: <a href="foo">Foo</a>. This would resolve to http://example.com/foo, just how <a href="localhost">Foo</a> would resolve to http://example.com/localhost.

When the String used to construct a new URL does not have enough information to determine whether is absolute or scheme-relative, host-relative, it is assumed to just be a relative URL.

@rgrove
Copy link

rgrove commented Feb 7, 2012

This seems like the right behavior to me. Other URL parsing libs do the same thing.

Node.js:

> url.parse('localhost').host
undefined
> url.parse('localhost').path
'localhost'

Ruby:

ruby-1.9.2-p290 :005 > URI('localhost').host
 => nil 
ruby-1.9.2-p290 :006 > URI('localhost').path
 => "localhost" 

@ericf ericf closed this as completed Feb 7, 2012
@srw
Copy link
Author

srw commented Feb 7, 2012

Don't agree. If I go to localhost in Google Chrome and type: document.location in the console, host is handled properly.
if you follow a more canonical example like the solution proposal at http://stackoverflow.com/a/736970/88231 it doesn't work either.

@rgrove
Copy link

rgrove commented Feb 7, 2012

That's because Chrome has context. When you type "localhost" in the URL bar, it assumes you meant "http://localhost", because that's much more likely to be your intent than "file:///localhost" or something else. So Chrome browses to the hostname "localhost", and window.location then operates in the context of the hostname "localhost", path "/".

A generic URL parsing library is not a browser, and can't make browser-like assumptions about user intent, because the prupose of a generic URL parsing library is to parse URLs, not to display web pages to users. Given that the other non-browser-related generic URL parsing libraries I've tried have treated "localhost" as a path rather than a hostname, I think this behavior is well established, and violating it would violate the principle of least surprise.

A BrowserURL class that extends URL and provides more browser-like URL behavior would be well within its rights to interpret "localhost" as a hostname, however.

@ericf
Copy link
Owner

ericf commented Feb 7, 2012

A browser's Address Bar is afforded more contextual information in that it assumes a String which does not begin with a "/" is assumed to be the hostname and "http://" can be implied. In the case of Chrome, it special-cases "localhost", if you type in "asdf" it will do a Google search for "asdf".

To solve you're particular use-case, URL('http://localhost') or URL('//localhost') will signal that the specified String should be treated as a hostname.

@srw
Copy link
Author

srw commented Feb 7, 2012

Sorry but I wrongly wrote the original issue.

I rechecked and It is:

var u = new URL('http://localhost')
u.host()
undefined

even if I use 'http://localhost'

@ericf
Copy link
Owner

ericf commented Feb 7, 2012

@srw Ah okay. I can verify that this is in fact happening: http://jsfiddle.net/ericf/JhPCH/

@ericf ericf reopened this Feb 7, 2012
@ghost ghost assigned ericf Feb 7, 2012
@dangmai
Copy link

dangmai commented Jul 4, 2012

Is there a solution to this issue yet? I'd like to fix it myself, but my regexp is pretty limited and it seems URL_ABSOLUTE_REGEX is the variable that needs to be modified for this to work correctly

@ericf
Copy link
Owner

ericf commented Jul 5, 2012

@dunkdt It has not been resolved yet. I'd like to eventually revisit this project and change the core rexexes that it uses. I just haven't had time to dedicate to doing that since it is currently meeting my needs.

@srw
Copy link
Author

srw commented Jul 5, 2012

I tried also with http://code.google.com/p/jsuri/ may be good to integrate all URI's parsers? I don't see that competition is good in this terrain!

@ericf
Copy link
Owner

ericf commented Jul 5, 2012

@srw Yup! I want to replace the guts to use http://blog.stevenlevithan.com/archives/parseuri

@ericf
Copy link
Owner

ericf commented Jul 5, 2012

Also, I found out about jsURI after I wrote this project :P

@awb
Copy link

awb commented Jul 13, 2013

I also consider it a bug that URL("http://localhost").host() returns undefined.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants