I would like to know the differences between these two types of URLs: relative URLs (for pictures, CSS files, JS files, etc.) and absolute URLs.
In addition, which o
If by absolute URLs you mean URLs including scheme (e.g. http / https) and the hostname (e.g. yourdomain.com) don't ever do that (for local resources) because it will be terrible to maintain and debug.
Let's say you have used absolute URL everywhere in your code like . Now what will happen when you are going to:
In the first example what will happen is that you will get warnings about unsafe content being requested on the page. Because all your URLs are hardcoded to use http(://yourdomain.com/images/example.png). And when running your pages over https the browser expects all resources to be loaded over https to prevent leaking of information.
In the second example when putting your site live from the test environment it would mean all resources are still pointing to your test domain instead of your live domain.
So to answer your question about whether to use absolute or relative URLs: always use relative URLs (for local resources).
First lets have a look at the different types of urls that we can use:
http://yourdomain.com/images/example.png
//yourdomain.com/images/example.png
/images/example.png
images/example.png
In the examples below I assume the website is running from the following location on the server /var/www/mywebsite
.
http://yourdomain.com/images/example.png
The above (absolute) URL tries to access the resource /var/www/website/images/example.png
. This type of URL is something you would always want to avoid for requesting resources from your own website for reason outlined above. However it does have its place. For example if you have a website http://yourdomain.com
and you want to request a resource from an external domain over https you should use this. E.g. https://externalsite.com/path/to/image.png
.
//yourdomain.com/images/example.png
This URL is relative based on the current scheme used and should almost always be used when including external resources (images, javascripts etc).
What this type of URL does is use the current scheme of the page it is on. This means that you are on the page http://yourdomain.com
and on that page is an image tag the URL of the image would resolve in
http://yourdomain.com/images/example.png
.
When you would have been on the page http**s**://yourdomain.com
and on that page is an image tag the URL of the image would resolve in
https://yourdomain.com/images/example.png
.
This prevent loading resources over https when it is not needed and automatically makes sure the resource is requested over https when it is needed.
The above URL resolves in the same manner on the server side as the previous URL:
The above (absolute) URL tries to access the resource
/var/www/website/images/example.png
.
/images/example.png
For local resources this is the prefered way of referencing them. This is a relative URL based on the document root (/var/www/mywebsite
) of your website. This means when you have it will always resolve to
/var/www/mywebsite/images/example.png
.
If at some point you decide to switch domain it will still work because it is relative.
images/example.png
This is also a relative URL although a bit different than the previous one. This URL is relative to the current path. What this means is that it will resolve to different paths depending on where you are in the site.
For example when you are on the page http://yourdomain.com
and you use it would resolve on the server to
/var/www/mywebsite/images/example.png
as expected, however when your are on the page http://yourdomain.com/some/path
and you use the exact same image tag it suddenly will resolve to /var/www/mywebsite/some/path/images/example.png
.
When requesting external resources you most likely want to use an URL relative to the scheme (unless you want to force a different scheme) and when dealing with local resources you want to use relative URLs based on the document root.
An example document:
Example