什么是 URI 和 URL?它们之间有什么区别?

URI(Uniform Resource Identifier)和 URL(Uniform Resource Locator)都是用于标识互联网资源的字符串。但它们有以下区别:

URI:

  1. URI是抽象标识符,用于标识某个资源。它不包含资源如何获取或其网络位置的信息。
  2. URI的语法十分广泛,可以使用多种 schemes来标识资源,如mailto、tel等。
  3. URI可能需要额外信息才能获取对应的资源,如相对URI需要基准URI。

URL:

  1. URL是具体的URI,用于标识网络资源(如网页)及其获取位置。它指明了资源的获取方式(scheme)和网络位置(host)。
  2. URL的scheme通常是http、https、ftp等,用于指明使用相应协议访问资源。
  3. URL是自包含的,可以直接用于获取网络资源,无需额外信息。
  4. 每个URL都是一个URI,但不是每个URI都是URL。

代码示例:

python
# URL例子
url = 'https://www.itzhimei.com/test.html'

# 分解URL
scheme = url[:8]     # https
host = url[8:24]     # www.example.com  
path = url[24:]      # /test.html

# URI例子 
uri = 'mailto:test@example.com' 
uri = '/test.html'   # 相对URI,需要基准URI

# 判断URL
def is_url(string):
    try: 
        result = urlparse(string)
        return all([result.scheme, result.netloc])
    except ValueError:
        return False