一文帶你理解 URI 和 URL 有什麼區別?

當我們打開瀏覽器,要訪問一個網站或者一個 ftp 服務器的時候,一定要輸入一串字符串, 比如:

https://blog.csdn.net/

或者:

ftp://192.168.0.111/

這樣我們就可以得到一個 html 格式的頁面或者一個文件。

那麼這個地址是什麼意思呢?

就必須要從URI、URL、URN講起。

一、URI、URL、URN 概念

看了這個概念相信大家還是不明白什麼意思,

簡單來說,就是 URI 是抽象的定義,不管用什麼方法表示,只要能定位一個資源,就叫 URI。

本來設想的的使用兩種方法定位:1,URL,用地址定位;2,URN 用名稱定位。

舉個例子:去村子找個具體的人(URI),如果用地址:某村多少號房子第幾間房的主人 就是 URL, 如果用身份證號 + 名字 去找就是 URN 了。

原來 uri 包括 url 和 urn,後來 urn 沒流行起來,導致幾乎目前所有的 uri 都是 url。

三者之間幾何關係如下:其實一直有個誤解,很多人以爲 URI 是 URL 的子集,其實應該反過來。URL 是 URI 的子集纔對。

URI RFC 3986

URL 是什麼

URL 代表着是統一資源定位符(UniformResourceLocator)。

作用是爲了告訴使用者 某個資源在 Web 上的地址。

這個資源可以是一個 HTML 頁面,一個 CSS 文檔,一幅圖像或一個貓片等等。

比如:

用 HTTP 協議訪問 Web 服務器:

用 FTP 協議下載和上傳文件時

讀取客戶端計算機本地文件時

這裏面細分,又可以分爲好幾個部分。

協議

儘管 URL 有各種不同的寫法, 但它們有一個共同點, 開頭部分的內容必須是協議類型,

可以是 http、ftp、mailto 或者 https,這部分文字都表示瀏覽器應當使用的訪問方法。, 會用 // 爲分隔符。

決定了後面部分的寫法, 因此並不會造成混亂。

用戶名 / 密碼

用戶名密碼通常可以省略。

域名

域名是 www.gitee.com,在發送請求前,會向 DNS 服務器解析 IP。如果已經知道 ip,還可以跳過 DNS 解析那一步,直接把 IP 當做域名部分使用。

端口

域名後面有些時候會帶有端口,和域名之間用:分隔,端口不是一個 URL 的必須的部分。當網址爲 http:// 時,默認端口爲 80, https:// 時,默認端口是 443, ftp:// 時,默認端口是 21。

文件路徑 / 文件名

從域名的第一個 / 開始到最後一個 / 爲止,是虛擬目錄的部分。虛擬目錄也不是 URL 必須的部分,上述實例 http 協議 url 中的虛擬目錄是/yikoulinux/chat/blob/master/

從域名最後一個/開始到?爲止,是文件名部分;如果沒有?,則是從域名最後一個/開始到#爲止,是文件名部分;如果沒有?#,那麼就從域名的最後一個 / 從開始到結束,都是文件名部分。

比如前面的 http url 實例,其中文件chat.h在 gitee 服務器/yikoulinux/chat/blob/master/下:文件名也不是一個 URL 的必須部分。

文件名省略情況如下:

  1. http://www.gitee.com/dir/

我們可以這樣理解, 以 “/” 結尾代表 /dir/ 後面本來應該有的文件名被省略了。根據 URL 的規則, 文件名可以像前面這樣省略。不過, 沒有文件名, 服務器怎麼知道要訪問哪個文件呢?其實, 我們會在服務器上事先設置好文件名省略時要訪問的默認文件名。這個設置根據服務器不同而不同, 大多數情況下是 index.html 或者 default.htm 之類的文件名。

因此, 像前面這樣省略文件名時, 服務器就會訪問 /dir/index.html或者 /dir/default.htm[由 web 服務器配置]。

  1. http://www.gitee.com/ 這個 URL 也是以 “/” 結尾的, 也就是說它表示訪問一個名叫 “/” 的目錄 。而且, 由於省略了文件名, 所以結果就是訪問 /index.html 或者 / default.htm 這樣的文件了。

  2. http://www.gitee.com 這次連結尾的 “/” 都省略了。像這樣連目錄名都省略時, 真不知道到底在請求哪個文件了, 實在有些過分。不過, 這種寫法也是允許的。當沒有路徑名時, 就代表訪問根目錄下事先設置的默認文件 , 也就是 /index.html 或者 /default.htm 這些文件, 這樣就不會發生混亂了。

  3. http://www.gitee.com/yikoupeng

一般來說, 這種情況會按照下面的慣例進行處理:如果 Web 服務器上存在名爲 yikoupeng 的文件, 則將 yikoupeng 作爲文件名來處 理;如果存在名爲 yikoupeng 的目錄, 則將 yikoupeng 作爲目錄名來處理 。

rfc

關於協議的說明文檔,可以登錄下面網站查詢:

https://www.rfc-editor.org/

搜索 URL 協議的說明,就有 25 個結果。我們想查看某個協議,點擊即可。可以以任意一種格式查看該文檔:

下面只拷貝第一頁內容:

Network Working Group                                     T. Berners-Lee
Request for Comments: 1738                                          CERN
Category: Standards Track                                    L. Masinter
                                                       Xerox Corporation
                                                             M. McCahill
                                                 University of Minnesota
                                                                 Editors
                                                           December 1994


                    Uniform Resource Locators (URL)

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Abstract

   This document specifies a Uniform Resource Locator (URL), the syntax
   and semantics of formalized information for location and access of
   resources via the Internet.

1. Introduction

   This document describes the syntax and semantics for a compact string
   representation for a resource available via the Internet.  These
   strings are called "Uniform Resource Locators" (URLs).

   The specification is derived from concepts introduced by the World-
   Wide Web global information initiative, whose use of such objects
   dates from 1990 and is described in "Universal Resource Identifiers
   in WWW", RFC 1630. The specification of URLs is designed to meet the
   requirements laid out in "Functional Requirements for Internet
   Resource Locators" [12].

   This document was written by the URI working group of the Internet
   Engineering Task Force.  Comments may be addressed to the editors, or
   to the URI-WG <uri@bunyip.com>. Discussions of the group are archived
   at <URL:http://www.acl.lanl.gov/URI/archive/uri-archive.index.html>
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/nuwYGdVLhi3hWq25o9kvuA