绝对与相对网址
我想知道这两种类型的URL之间的区别:相对URL(用于图片,CSS文件,JS文件等)和绝对URL。
另外,哪一个更好用?
通常,使用相对URL是最佳做法,以便您的网站不会绑定到当前部署的基本URL。 例如,它可以在本地主机上以及公共领域上工作,无需修改。
我应该使用绝对还是相对URL?
如果使用绝对URL,则意味着包括scheme(例如http / https)和主机名(例如yourdomain.com)在内的URL永远不会这样做(对于本地资源),因为维护和调试会很糟糕。
假设您在您的代码中使用了绝对URL,例如<img src="http://yourdomain.com/images/example.png">
。 现在当你要做什么时会发生什么:
在第一个示例中,将发生的是您将收到有关页面上所请求的不安全内容的警告。 因为所有的URL都被硬编码为使用http(://yourdomain.com/images/example.png)。 当通过http运行你的页面时,浏览器希望通过https加载所有资源以防止信息泄露。
在第二个例子中,当您的网站从测试环境中启用时,这意味着所有资源仍然指向您的测试域,而不是您的活动域。
因此,要回答您是否使用绝对或相对URL的问题:始终使用相对URL(用于本地资源)。
不同的网址有什么区别?
首先让我们看看我们可以使用哪些不同的URL:
http://yourdomain.com/images/example.png
//yourdomain.com/images/example.png
/images/example.png
images/example.png
这些网址尝试在服务器上访问哪些资源?
在下面的例子中,我假定网站正在服务器/var/www/mywebsite
上的以下位置运行。
http://yourdomain.com/images/example.png
以上(绝对)URL尝试访问资源/var/www/website/images/example.png
。 出于上述原因,这种类型的URL是您始终希望避免从您自己的网站请求资源的东西。 但它确实有它的位置。 例如,如果你有一个网站http://yourdomain.com
并且你想通过http请求一个来自外部域的资源,你应该使用这个。 例如https://externalsite.com/path/to/image.png
。
//yourdomain.com/images/example.png
该URL基于当前使用的方案是相对的,并且在包括外部资源(图像,JavaScript等)时应该几乎总是被使用。
这种类型的URL所使用的是使用当前页面的方案。 这意味着您位于http://yourdomain.com
页面上,并且该页面上是图片标记<img src="//yourdomain.com/images/example.png">
的网址将在http://yourdomain.com/images/example.png
解析http://yourdomain.com/images/example.png
。
如果您在网页http**s**://yourdomain.com
上,并且该网页上有图片标记<img src="//yourdomain.com/images/example.png">
图像将在https://yourdomain.com/images/example.png
解析。
这可防止在不需要时通过https加载资源,并在需要时自动确保通过https请求资源。
上面的URL在服务器端以与上一个URL相同的方式解析:
以上(绝对)URL尝试访问资源/var/www/website/images/example.png
。
/images/example.png
对于本地资源,这是引用它们的首选方式。 这是基于您网站的文档根目录( /var/www/mywebsite
)的相对URL。 这意味着当你有<img src="/images/example.png">
它总是会解析为/var/www/mywebsite/images/example.png
。
如果您在某个时候决定切换域,它仍然可以工作,因为它是相对的。
images/example.png
这也是一个相对的URL,虽然有点不同于前一个。 该URL与当前路径相关。 这意味着它将根据您在网站中的位置解析为不同的路径。
例如,当您在http://yourdomain.com
的页面上,并且使用<img src="images/example.png">
它会在服务器上解析为/var/www/mywebsite/images/example.png
as预计,但是当你在http://yourdomain.com/some/path
页面上,并且你使用完全相同的图片标签时,它会突然解析到/var/www/mywebsite/some/path/images/example.png
。
何时使用什么?
在请求外部资源时,您最希望使用与该方案相关的URL(除非您想强制使用不同的方案),并且在处理本地资源时,您希望使用基于文档根目录的相对URL。
示例文档:
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
<link href='//fonts.googleapis.com/css?family=Lato:300italic,700italic,300,700' rel='stylesheet' type='text/css'>
<link href="/style/style.css" rel="stylesheet" type="text/css" media="screen"></style>
</head>
<body>
<img src="/images/some/localimage.png" alt="">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" ></script>
</body>
</html>
一些(有点)重复
看到这个:http://en.wikipedia.org/wiki/URI_scheme#Generic_syntax
foo://username:password@example.com:8042/over/there/index.dtb;type=animal?name=ferret#nose
/ ________________/_________/ __/ ___/ _/ _________/ _________/ __/
| | | | | | | | |
| userinfo hostname port | | parameter query fragment
| _______________________________/ _____________|____|____________/
scheme | | | |
| authority |path|
| | |
| path interpretable as filename
| ___________|____________ |
/ / |
urn:example:animal:ferret:nose interpretable as extension
绝对URL包括“路径”部分之前的部分-换句话说,它包括计划( http
中http://foo/bar/baz
)和主机名(所述foo
中http://foo/bar/baz
)(以及可选的端口,用户信息和端口)。
相对URL从一个路径开始。
绝对的URL是绝对的:资源的位置只能在url本身解析。 相对URL在某种意义上是不完整的:要解决它,您需要方案和主机名,这些通常取自当前上下文。 例如,在一个网页上
http://myhost/mypath/myresource1.html
你可以把这样的链接
<a href="pages/page1">click me</a>
在链接的href
属性中,使用了一个相对的url,如果它被点击了,它必须被解析才能遵循它。 在这种情况下,当前上下文是
http://myhost/mypath/myresource1.html
所以这些模式,主机名和前导路径被采用并预先写到pages/page1
,产生
http://myhost/mypath/pages/page1
如果链接是:
<a href="/pages/page1">click me</a>
(注意/
出现在url的开头),那么它将被解析为
http://myhost/pages/page1
因为前导/
表示主机的根。
在一个web应用程序中,我建议使用相关url来查找属于你的应用程序的所有资源。 这样,如果您更改页面的位置,所有内容都将继续有效。 任何外部资源(可能是完全位于应用程序之外的页面,也可能是通过内容交付网络提供的静态内容)应始终指向使用绝对URL:如果不存在,则根本无法找到它们,因为它们驻留在不同的服务器上。
链接地址: http://www.djcxy.com/p/42221.html上一篇: Absolute vs relative URLs
下一篇: What is the effect of starting a url with "//", and leaving out "http:"