Treat "//some_path" as pathname rather than hostname by default.
Note that "//" is still a special indicator for the hostname, and this does not change the parsing of mailto: and other "slashless" url schemes. It does however remove some oddness in url.parse(req.url) which is the most common use-case for the url.parse function.
This commit is contained in:
parent
7347fb3e2c
commit
0e311717b5
11
lib/url.js
11
lib/url.js
@ -18,7 +18,7 @@ var protocolPattern = /^([a-z0-9]+:)/,
|
||||
path = require("path"), // internal module, guaranteed to be loaded already.
|
||||
querystring = require('querystring');
|
||||
|
||||
function urlParse (url, parseQueryString) {
|
||||
function urlParse (url, parseQueryString, slashesDenoteHost) {
|
||||
if (url && typeof(url) === "object" && url.href) return url;
|
||||
|
||||
var out = { href : url },
|
||||
@ -32,11 +32,16 @@ function urlParse (url, parseQueryString) {
|
||||
}
|
||||
|
||||
// figure out if it's got a host
|
||||
// user@server is *always* interpreted as a hostname, and url
|
||||
// resolution will treat //foo/bar as host=foo,path=bar because that's
|
||||
// how the browser resolves relative URLs.
|
||||
if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) {
|
||||
var slashes = rest.substr(0, 2) === "//";
|
||||
if (slashes && !(proto && hostlessProtocol[proto])) {
|
||||
rest = rest.substr(2);
|
||||
out.slashes = true;
|
||||
}
|
||||
}
|
||||
if (!hostlessProtocol[proto] && (slashes || (proto && !slashedProtocol[proto]))) {
|
||||
// there's a hostname.
|
||||
// the first instance of /, ?, ;, or # ends the host.
|
||||
@ -133,8 +138,8 @@ function urlResolve (source, relative) {
|
||||
function urlResolveObject (source, relative) {
|
||||
if (!source) return relative;
|
||||
|
||||
source = urlParse(urlFormat(source));
|
||||
relative = urlParse(urlFormat(relative));
|
||||
source = urlParse(urlFormat(source), false, true);
|
||||
relative = urlParse(urlFormat(relative), false, true);
|
||||
|
||||
// hash is always overridden, no matter what.
|
||||
source.hash = relative.hash;
|
||||
|
@ -7,6 +7,10 @@ var url = require("url"),
|
||||
// URLs to parse, and expected data
|
||||
// { url : parsed }
|
||||
var parseTests = {
|
||||
"//some_path" : {
|
||||
"href": "//some_path",
|
||||
"pathname": "//some_path"
|
||||
},
|
||||
"http://www.narwhaljs.org/blog/categories?id=news" : {
|
||||
"href": "http://www.narwhaljs.org/blog/categories?id=news",
|
||||
"protocol": "http:",
|
||||
|
Loading…
x
Reference in New Issue
Block a user