Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Are protocol-relative URLs relative URLs?

So consider a protocol-relative URL like so;

//www.example.com/file.jpg

The idea I've had in my head for as long as I can remember is that protocol-relative URLs are in fact absolute URLs. They behave exactly like absolute URLs, and never do they work like relative URLs. I wouldn't expect this to make the browser go find something at

http://www.example.com///www.example.com/file.jpg

The URL defines the host and the path (like an absolute URL does), and the scheme is inherited from whatever the page used, and therefore it makes a complete unambiguous URL, i.e. an absolute URL.

Right?

Now, upon further research into this, I came upon this answer, which states;

A URL is called an absolute URL if it begins with the scheme and scheme specific part (here // after http:). Anything else is a relative URL.

Neither the question nor the answer specifically discuss protocol-relative URLs, so I'm mindful that it can just be an oversight in wording.

However, I'm now also now running into an issue in my development, where a system that only accepts absolute URLs doesn't function with protocol-relative URLs, and I don't know if that's by design or due to a bug.

The RFC3986 section which is often linked to in relation to protocol-relative URLs also splashes the word "relative" around a lot. 4.3 then goes on to say that absolute URIs define a scheme.

All this evidence against my initial assumption led me to the question;

Are protocol-relative URLs relative or absolute?

like image 587
Emphram Stavanger Avatar asked Mar 22 '13 23:03

Emphram Stavanger


1 Answers

Every relative URL is an unambiguous URL given the URL it is relative to. So if your page is http://mypage.com/some/folder/ then you know the relative URL this/that corresponds to http://mypage.com/some/folder/this/that and you know the relative URL //otherpage.com/ resolves to http://otherpage.com/. Importantly, it cannot be resolved without knowing the page URL it is relative to.

A relative URL is any URL that is relative to something and cannot be resolved by itself. An aboslute URL does not require any context whatsoever to resolve.

like image 150
j__m Avatar answered Oct 04 '22 04:10

j__m