绝对与相对网址

我想知道这两种类型的URL之间的区别:相对URL(用于图片,CSS文件,JS文件等)和绝对URL。

另外,哪一个更好用?


通常,使用相对URL是最佳做法,以便您的网站不会绑定到当前部署的基本URL。 例如,它可以在本地主机上以及公共领域上工作,无需修改。


我应该使用绝对还是相对URL?

如果使用绝对URL,则意味着包括scheme(例如http / https)和主机名(例如yourdomain.com)在内的URL永远不会这样做(对于本地资源),因为维护和调试会很糟糕。

假设您在您的代码中使用了绝对URL,例如<img src="http://yourdomain.com/images/example.png"> 。 现在当你要做什么时会发生什么:

  • 切换到另一个方案(例如http - > https)
  • 切换域名(test.yourdomain.com - > yourdomain.com)
  • 在第一个示例中,将发生的是您将收到有关页面上所请求的不安全内容的警告。 因为所有的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>
    

    一些(有点)重复

  • 安全地编写跨环境传输的URL
  • 在网站中链接图片的正确方法是什么?

  • 看到这个: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包括“路径”部分之前的部分-换句话说,它包括计划( httphttp://foo/bar/baz )和主机名(所述foohttp://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:"