一张图带你彻底了解URL的结构,非常形象!

科技   2024-10-20 10:39   广东  

公众号:网络技术联盟站 

URL(Uniform Resource Locator,统一资源定位符)是互联网上每个资源的地址。URL 是我们日常浏览网页、下载文件、访问 API 等操作中经常接触到的基础概念。尽管我们每天都会与 URL 打交道,但其复杂的结构常常被忽略。URL 中的每个部分都有其特定的功能与用途。本文将详细剖析 URL 的各个组成部分:Protocol、Sub Domain、Domain Name、Port、Query、Parameters 和 Fragment,帮助你全面了解它们的作用及其在实际应用中的意义。

URL 的基本结构

在深入探讨各个部分之前,先看一个典型的 URL 示例:

从上面的 URL 中,我们可以识别出以下几个主要部分:

  • https:// - Protocol
  • www. - Sub Domain
  • wljslmz.cn - Domain Name
  • :80 - Port
  • /login.html - Path
  • ?key1=value1 - Query
  • #123 - Fragment

接下来,我们将逐一详细讲解每个部分的功能与作用。

Protocol(协议)

协议是指定如何传输数据的规则或标准。在 URL 中,协议位于最前面,通常以“://”结尾。常见的协议包括 httphttpsftpmailto 等。协议决定了客户端与服务器之间通信的方式。

  • HTTP(Hypertext Transfer Protocol): HTTP 是一种用于传输超文本数据的协议,是 Web 的基础协议。HTTP 是无状态的,每次请求都是独立的。
  • HTTPS(Hypertext Transfer Protocol Secure): HTTPS 是 HTTP 的安全版本,使用 SSL/TLS 加密数据传输,以保护敏感信息的安全。HTTPS 是当前 Web 应用的主流协议。
  • FTP(File Transfer Protocol): FTP 是一种用于传输文件的协议,广泛用于文件的上传与下载。FTP 可以通过用户名和密码进行认证,也可以匿名访问。
  • Mailto: Mailto 是一个用于创建电子邮件链接的协议。点击 Mailto 链接时,会自动打开默认的电子邮件客户端,并在撰写新邮件时填入指定的收件人地址。

协议的选择不仅影响数据传输的方式,还直接影响数据的安全性。HTTP 已逐渐被 HTTPS 取代,因为后者提供了更高的安全性,尤其是在涉及到用户隐私和敏感信息时。

在 SEO(搜索引擎优化)中,使用 HTTPS 协议是一个重要的排名因素。Google 等搜索引擎更倾向于优先展示 HTTPS 网站,因为它们更加安全可靠。

Sub Domain(子域名)

子域名是主域名之前的部分,用于将主域名下的某个部分或子网站独立开来。子域名通常用于创建站点的不同部分,比如博客、商店或论坛。子域名与主域名共享同一个根域名(TLD 和 SLD)。

  • 区分不同的服务: 例如 blog.example.com 可能用于博客,store.example.com 可能用于在线商店。
  • 地区划分: 某些企业会根据地区创建不同的子域名,例如 us.example.comeu.example.com
  • 语言划分: 为了提供多语言支持,可能会创建类似 en.example.comfr.example.com 的子域名。

子域名在 SEO 中有其特殊的作用。虽然子域名是主域名的一部分,但搜索引擎通常会将其视为独立的网站。因此,子域名上的内容不会与主域名上的内容直接竞争,但同时也不能共享 SEO 权重。

选择子域名时,需考虑品牌一致性和用户体验。子域名应简洁易记,并与其提供的服务或内容相关联。子域名的选择也应避免过度细分,导致用户困惑或品牌分散。

Domain Name(域名)

域名是互联网上资源的标识符,是用户访问网站时最常见的部分。域名由两个主要部分组成:顶级域名(TLD)和二级域名(SLD)。例如在 wljslmz.cn 中,wljslmz 是二级域名,.cn 是顶级域名。

  • 顶级域名(TLD): TLD 是域名的最后一部分,如 .com.org.net 等。TLD 可以进一步分为通用顶级域名(gTLD)和国家顶级域名(ccTLD)。
    • gTLD: 包括 .com(商业)、.org(组织)、.net(网络)等。
    • ccTLD: 根据国家或地区划分,如 .cn(中国)、.uk(英国)、.jp(日本)等。
  • 二级域名(SLD): SLD 位于 TLD 之前,是域名的主要部分。通常是公司名称、品牌或个人名字。
  • 三级域名及其他: 三级域名及其他更低级的域名通常是子域名,如 blog.example.com 中的 blog

选择域名时,以下几点至关重要:

  • 简短易记: 域名应尽可能简短,易于拼写和记忆。
  • 品牌相关: 域名应与品牌名或业务直接相关,以便用户能轻松地联想到。
  • 避免特殊字符: 尽量避免使用连字符、数字等特殊字符,除非这些字符与品牌有明确的关联。
  • 选择合适的 TLD: .com 是最常见的 TLD,通常也是首选。但如果是非盈利组织,可以选择 .org,如果是网络服务公司,可以选择 .net

注册域名时,必须确保所选域名未侵犯他人的商标或版权。购买域名前,可以通过 WHOIS 查询工具查找域名的注册信息。侵犯他人商标的域名可能会导致法律诉讼和域名争议。

注册域名通常需要通过域名注册商完成,如 GoDaddy、Namecheap 等。注册完成后,域名需定期续费,以防止被他人抢注。域名还可以转移到不同的注册商,但需要满足特定条件。

Port(端口)

端口是用于区分同一 IP 地址上不同服务的编号。服务器可以在同一 IP 地址上运行多个服务,每个服务通过不同的端口号进行访问。端口号是一个 16 位的数字,范围从 0 到 65535,其中一些端口号被标准化用于特定服务。

  • HTTP(端口 80): 默认用于 HTTP 协议的端口。
  • HTTPS(端口 443): 默认用于 HTTPS 协议的端口。
  • FTP(端口 21): 默认用于 FTP 协议的端口。
  • SMTP(端口 25): 默认用于发送电子邮件的简单邮件传输协议(SMTP)。
  • DNS(端口 53): 默认用于域名系统(DNS)服务。

由于端口直接暴露在网络上,未受保护的端口可能成为黑客攻击的目标。常见的攻击手段包括端口扫描、利用开放端口进行未经授权的访问等。因此,服务器管理员通常会通过防火墙限制对特定端口的访问,仅允许信任的 IP 地址或网络访问关键服务。

尽管每个协议通常有其默认的端口,但在某些情况下可以使用自定义端口。这在多服务环境中尤为常见,如运行多个 Web 服务器或 FTP 服务器时。自定义端口可以通过 URL 中的 :port 指定,如 http://subdomain.example.com:8080 表示使用端口 8080 访问 subdomain.example.com 上的服务。

端口转发是一种网络配置技术,用于将外部请求的某个端口映射到内部网络的不同端口或主机。这在家庭网络或小型企业网络中尤为常见,允许通过公共 IP 地址访问内部网络服务。例如,可以将家庭路由器的 8080 端口映射到内网服务器的 80 端口,以便外部用户访问家庭网页服务器。

Path(路径)

路径是指资源在服务器上的具体位置。在 URL 中,路径位于域名和端口号之后,通常以 / 分隔的形式出现。路径结构类似于文件系统,表示资源在服务器上的目录层级。

路径可以是一个简单的文件名,也可以是一个更复杂的目录结构。例如:

  • /index.html 指向根目录下的 index.html 文件。
  • /images/photo.jpg 指向 images 目录下的 photo.jpg 文件。

路径不仅可以指向静态资源,如 HTML 文件、图片、CSS、JavaScript 等,还可以指向动态资源,如 Web 应用程序中的 API 端点。

现代 Web 应用程序经常使用动态路径来表示动态资源。这些路径通常通过框架和路由机制生成,并与参数结合使用。例如,RESTful API 常见的路径形式如下:

  • /users/123 表示 ID 为 123 的用户信息。
  • /products/456 表示 ID 为 456 的产品信息。

在某些情况下,路径还可以包含查询字符串(Query),以向服务器传递额外的参数。

路径的组织方式对 SEO 有重要影响。搜索引擎偏好结构清晰、易于理解的路径。通常,扁平的路径结构(如 /category/product)比深层嵌套的路径结构(如 /category/subcategory/product)更受欢迎。此外,路径中使用描述性关键词可以提高页面的可见性和排名。

路径在安全性方面也需要谨慎对待。公开的路径应避免暴露敏感信息,如用户 ID、文件路径等。此外,路径遍历攻击(Path Traversal)是一种常见的安全威胁,攻击者通过操纵 URL 中的路径部分访问未经授权的文件或目录。防止此类攻击的方法包括对路径进行输入验证和严格的访问控制。

Query(查询字符串)

查询字符串是附加在 URL 末尾的参数,用于向服务器传递额外的信息。查询字符串由 ? 开始,后面跟随 key=value 的键值对,多个键值对之间使用 & 分隔。例如:

https://example.com/search?query=URL&sort=asc&page=2

在此示例中,query=URLsort=ascpage=2 是查询字符串中的键值对。

查询字符串广泛应用于 Web 开发中,主要用于以下场景:

  • 搜索功能: 在搜索引擎或网站内部搜索中,查询字符串用于传递用户的搜索关键词和其他过滤条件。
  • 分页功能: 查询字符串用于传递当前的页码和分页大小,以获取特定页的数据。
  • 过滤与排序: 在电商网站中,查询字符串用于传递商品的过滤条件(如价格范围、品牌等)和排序方式(如价格升序、降序等)。

由于查询字符串通过 URL 传递,必须遵循 URL 编码规范。URL 编码用于将特殊字符转换为百分号编码(%)格式,以避免传输过程中出现解析错误。例如,空格字符在 URL 中被编码为 %20

在服务器端接收到查询字符串后,通常需要对其进行解码,以还原原始数据。大多数 Web 框架和编程语言都提供了方便的编码与解码函数。

查询字符串在浏览器地址栏中是可见的,因此不适合传递敏感信息,如密码、信用卡号等。为了保护用户隐私,应避免在查询字符串中暴露敏感数据。对于涉及敏感数据的请求,建议使用 POST 请求和 HTTPS 协议,以加密传输的数据。

过长或复杂的查询字符串可能对 SEO 产生负面影响。搜索引擎通常会优先索引静态 URL 而非动态 URL。此外,如果查询字符串中的参数过多,可能会导致搜索引擎无法正确识别页面内容,进而影响页面的排名。使用 URL 重写技术将查询字符串转换为友好的路径形式,是提升 SEO 的一种常见做法。

Parameters(参数)

在 URL 中,参数通常以键值对的形式出现在查询字符串或路径中,用于向服务器传递信息。虽然参数与查询字符串有些重叠,但参数的概念更为广泛,包含路径参数、查询参数和头部参数等多种形式。

  • 路径参数: 直接嵌入在 URL 路径中的参数,用于标识特定资源或执行特定操作。例如 /users/123 中的 123 是路径参数。
  • 查询参数: 通常出现在查询字符串中,用于筛选、排序或传递其他额外信息。例如 ?page=2&sort=desc 中的 pagesort 是查询参数。
  • 头部参数: 在 HTTP 请求头部中传递的参数,通常用于身份验证或传递元数据。虽然不属于 URL 的一部分,但头部参数在构建 RESTful API 时尤为重要。

良好的参数命名与组织有助于提高代码的可读性和可维护性。在选择参数名时,应遵循以下原则:

  • 简洁明了: 参数名应尽量简短,但能准确描述其用途。
  • 一致性: 在同一应用中应保持参数命名的一致性,避免混淆。
  • 避免过多参数: 尽量减少参数的数量,以保持 URL 简洁,提升可读性。

由于参数直接影响服务器的行为,必须对参数进行严格的验证,以防止恶意攻击和错误输入。常见的安全措施包括:

  • 输入验证: 确保参数的格式、类型和范围符合预期。
  • 防止 SQL 注入: 对于涉及数据库查询的参数,必须采取措施防止 SQL 注入攻击。
  • 权限验证: 确保用户仅能访问其权限范围内的数据或执行受限操作。

对于动态内容或 API 请求,参数的设计还会影响缓存和性能。通过使用 ETag、Last-Modified 等 HTTP 头部参数,可以提高资源的缓存命中率,减少服务器的负载。

Fragment(片段标识符)

片段标识符(Fragment Identifier)是 URL 的最后一部分,用于定位页面中的特定部分。片段标识符以 # 开头,后面跟随一个标识符。例如:

https://example.com/page#section2

在上述 URL 中,#section2 是片段标识符,用于指向页面中的 section2 部分。

片段标识符在网页导航中具有重要作用,通常用于:

  • 跳转到页面中的特定部分: 通过点击链接直接跳转到页面中的某个段落、图片或表格位置。
  • 单页应用(SPA)中的路由: 在单页应用中,片段标识符通常用于表示应用的不同状态或视图,而无需重新加载整个页面。
  • 表单校验与提示: 在提交表单时,片段标识符可以用于定位出错的输入字段,提示用户进行修正。

片段标识符通常不会影响 SEO,因为搜索引擎一般不考虑 # 之后的内容。不过,在单页应用中,片段标识符可能用于表示不同的内容或视图。在这种情况下,可以通过使用 hashbang#!)语法来确保搜索引擎正确索引这些内容。在某些情况下,特别是对于单页应用(SPA),开发者可能会选择使用 URL 中的路径或查询字符串来替代片段标识符,以确保页面能够被搜索引擎正确索引。

片段标识符会影响浏览器的默认行为。当用户访问包含片段标识符的 URL 时,浏览器会尝试滚动页面至指定的元素位置。如果该元素在页面上不存在,浏览器则会保持在页面顶部。此外,片段标识符的改变不会导致整个页面重新加载,这对于单页应用的开发非常有利。

在使用片段标识符时,开发者应注意以下几点:

  • 确保标识符唯一: 页面中的片段标识符应是唯一的,以避免用户导航到错误的位置。
  • 与 HTML 元素的 ID 结合使用: 片段标识符通常与 HTML 元素的 id 属性结合使用,确保标识符与页面内容相对应。
  • 考虑用户体验: 对于长页面或复杂内容,合理设置片段标识符可以显著提升用户体验,让用户更容易找到所需内容。

尽管片段标识符在网页导航中有很多优势,但也存在一些局限性。例如,片段标识符无法传递额外的参数信息,且在不同的页面或框架结构下可能无法正常工作。此外,过多或过于复杂的片段标识符可能会对用户体验产生负面影响。


为什么 OSI 物理层在网络故障排除方面如此重要?


一张图解释TCP和UDP有啥区别,太精辟了!


思科网络设备常见的巡检命令,网络工程师收藏!



END

微信扫码/长按识别 添加【技术交流群
群内都是技术大佬


喜欢就分享
认同就点赞

支持就在看

一键四连,你的技术也四连


运维李哥不背锅
专注于各种运维技术、,分享Linux基础知识,服务器,数据库,云原生和网络安全等相关技术,各种进阶知识等着你,助你成为技术达人!
 最新文章