前言

web基础中介绍了URI、URL与URN;

URI是一类更通用的资源标识符,URL是它的一个子集;

URI是一个通用的概念,它主要由URL与URN组成;

URL是通过描述资源的位置来标识资源的,而URN则是通过名字来识别资源的,所以后续的HTTP文章中更多使用的是URL。

URL标准格式

例如:你想要获得URL https://www.baidu.com/index.html,那么URL分为以下三部分:

第一部分:方案,方案可以告知web客户端怎样访问资源,通过何种协议;URL并不只是仅使用HTTP协议,如FTP、rtsp、email等协议都是可以的。

第二部分:地址,服务器的地址,可以是域名也可以是IP地址

第三部分:资源路径,路径说明了请求的是服务器上面的那部分资源

URL完整格式

上面讲述一个URL的标准格式,大部分的URL用上述的格式即可,还有一些特殊的内容可以用到,下面列出URL的完整格式,完整格式包含URL中所有需要的内容,并对这些内容进行详解

  1. <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
组  件 描     述 默 认 值
<scheme> 方案;访问服务器以获取资源时要使用哪种协议
<user> 用户名;某些方案访问资源时需要的用户名 anonymous
<password> 密码;用户名后面可能要包含的密码,中间由冒号(:)分隔 E-mail地址
<host> 主机地址;资源宿主服务器的主机名或点分 IP 地址
<port> 端口;资源宿主服务器正在监听的端口号。很多方案都有默认端口号(HTTP 的默认端口号为 80) 每个方案特有
<path> 路径;服务器上资源的本地名,由一个斜杠(/)将其与前面的 URL 组件分隔开来。路径组件的语法是与服务器和方案有关的(本章稍后会讲到 URL 路径可以分为若干个段,每段都可以有其特有的组件。)
<params> 参数;某些方案会用这个组件来指定输入参数。参数为名 / 值对。 URL 中可以包含多个参数字段,它们相互之间以及与路径的其余部分之间用分号(;)分隔
<query> 查询;某些方案会用这个组件传递参数以激活应用程序(比如数据库、公告板、搜索引擎以及其他因特网网关)。查询组件的内容没有通用格式。用字符“?”将其与 URL 的其余部分分隔开来
<frag> 片段;一小片或一部分资源的名字。引用对象时,不会将 frag 字段传送给服务器;这个字段是在客户端内部使用的。通过字符“#”将其与 URL 的其余部分分隔开来

实例

  1. # 方案;需注意,协议是不区分大小写的
  2. http://www.baidu.com
  3. HTTP://www.baidu.com
  4.  
  5. # 主机与端口;主机指向服务器,端口指向服务
  6. http://www.baidu.com:80
  7.  
  8. # 用户名与密码;
  9. ftp://anonymous@ftp.prep.ai.mit.edu/pub/gnu
  10. ftp://anonymous:my_passwd@ftp.prep.ai.mit.edu/pub/gnu
  11. http://joe:joespasswd@www.joes-hardware.com/sales_info.txt
  12.  
  13. # 路径
  14. http://www.baidu.com/Images/index.html
  15.  
  16. # 参数;这个例子有两个路径段,hammers和index.html。hammers路径段参数有sale,其值为false;index.html段有参数graphics,其值为true。
  17. http://www.baidu.com/hammers;sale=false/index.html;graphics=true
  18.  
  19. # 查询字符串;查看编号为12731的字段内容是否存在
  20. http://www.baidu.com/inventory-check.cgi?item=12731
  21.  
  22. # 片段;片段组件用来表示一个资源内部的片段,比如URL指向HTML文档中一个特定的图片或者小节
  23. http://www.baidu.com/tools.html#drills

URL快捷方式

绝对URL:URL中包含访问资源所需的全部信息;如:http://www.163.com/new.html

基础URL:针对同一个网站来讲,其相同的url部分,如:http://www.163.com

相对URL:去除基础URL,剩余的URL就是相对URL;如:/new.html,完整显示为http://www.163.com/new.html。相对URL只是URL的片段或一小部分,处理url的应用程序要能在相对和绝对URL之间进行转换。

实现相对url转换为绝对url的第一步就是找到基础url,怎么找基础url?

答:

  1. 在资源中显式提供,有些资源会显式的提供基础url。如:html文档中可能会包含了一个定义基础url的html标记<BASE>,通过它来转换那个html文档中的所有相对url
  2. 封装资源的基础url,如没显式的找到基础url,可以将其所属资源的url作为基础url。简单理解就是:将该相对url超链接所在页面绝对url中的基础url作为其基础url。
  3. 没有基础url:只有相对url,但有时可能只是一个不完整的或损坏了的url

解析相对引用图

自动扩展URL

自动扩展:很多浏览器会在用户提交URL/输入URL时尝试自动扩展URL,这样为用户提供便捷,用户不需要输入完整的URL,浏览器自动扩展

自动扩展特URL特性

主机名扩展:只要有些小提示,浏览器就可以帮你将输入的主机名扩展为完整的主机名,比如:输入baidu,构建出www.baidu.com;弊端在于有时候会为其他http应用程序带来问题,比如代理,后面详细解释

历史扩展:将以前用户访问过的URL记录储存起来,当用户输入URL时将其与历史记录中的URL前缀进行匹配,并提供一些完整的选项供用户选择

字符

URL作为互联网资源的标识,必须是可移植的、完整的。意思就是说,一个URL确定后,不管如何复制粘贴,这个URL的信息不能丢失!但是,URL使用的编码是ASCII,中文是不支持的(当然,不止是中文这么简单,ASCII无法表示所有字符这才是硬伤)。为了使用ASCII,又要支持其他字符,所以,编码就来了。其实这种编码就是转义,使用A代表B(比如URL中包含的类似%7E符号,就是转义之后的,代表着~这个特殊符号)。另外,还有一些特殊的保留字符(就像C语言中的关键字一样),若在保留场合之外使用需要编码。下面列举了这些字符:
 
 

方案详解

HTTP权威指南之URL与资源的更多相关文章

  1. HTTP权威指南笔记-2.URL与资源

    2.1 URI与URL.URN URL是浏览器寻找信息时所需的具体位置.URl是人们对HTTP和其他协议的常用访问点:浏览器指向一个URL,浏览器就会发送适当的协议报文向服务器获取内容. URI是一类 ...

  2. 《HTTP权威指南》学习笔记——URL和资源

    URL与资源 URL是互联网资源的标准化名称 1.浏览互联网资源 URL是浏览器寻找信息时所需的资源位置 URI是一类更通用的资源标识符,URL是它的子集. URI的两个子集:URL和URN URL提 ...

  3. HTTP权威指南读书笔记(一)HTTP概述、URL和资源及报文详解

    一.HTTP概述 1.WEB客户端和服务器. 2.资源:资源可以是各种格式的静态文件,也可以是应用程序. 3.媒体类型 4.URI:统一资源标识符 URL:统一资源定位符. URL的第一部分称为方案: ...

  4. HTTP权威指南-URL与资源

    URL与资源 URL是URI的子集 方案(http),主机(www.baidu.com),路径(/home/logo.png) 方案,其实有很多,HTTP.HTTPS.FTP,SMTP等等. http ...

  5. Hadoop权威指南:从Hadoop URL读取数据

    [TOC] Hadoop权威指南:从Hadoop URL读取数据 使用java.net.URL对象从Hadoop文件系统读取文件 实现类似linux中cat命令的程序 文件名 HDFSCat.java ...

  6. WebRTC 学习资源 电子书 WebRTC权威指南 Learning WebRTC

    webRTC源码下载地址:https://pan.baidu.com/s/18CjClvAuz3B9oF33ngbJIw 提取码:wl1e 1.<WebRTC权威指南>第三版 中文版 本书 ...

  7. Http权威指南笔记(一) URI URL URN 关系

    定义 URI:统一资源标识符(Uniform Resource Indentifier)用来标识服务器上的资源. URL:统一资源定位符(Uniform Resouce Locator)是资源标识符最 ...

  8. Android开发权威指南(第2版)新书发布

    <Android 开发权威指南(第二版)>是畅销书<Android开发权威指南>的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45 章精彩内容供 ...

  9. URL与资源

    资源推荐 1.HTTP权威指南. <HTTP权威指南>由古尔利所著,<HTTP权威指南>详细解释了HTTP协议,包括HTTP是如何工作的,如何用HTTP来开发基于Web的应用程 ...

随机推荐

  1. 超简单!pytorch入门教程(四):准备图片数据集

    在训练神经网络之前,我们必须有数据,作为资深伸手党,必须知道以下几个数据提供源: 一.CIFAR-10 CIFAR-10图片样本截图 CIFAR-10是多伦多大学提供的图片数据库,图片分辨率压缩至32 ...

  2. cmake安装mysql及多实例配置方法

    一.安装mysql 1. 生产环境如何选择MySQL版本 1. 选择社区版的稳定GA版本2. 可以选择5.1或5.5.互联网公司主流5.5, 其次是5.1和5.63. 选择发布后6个月以上的GA版4. ...

  3. Python 官方团队在打包项目中踩过的坑

    花下猫语:这是 packaging 系列的第三篇译文,该系列是全网关于此话题的最详尽(水平也很高)的一个系列.原作者是 Python 官方打包团队成员,是 virtualenv 和 tox 项目的维护 ...

  4. 1073 多选题常见计分法 (20分)C语言

    批改多选题是比较麻烦的事情,有很多不同的计分方法.有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到 50% 分数:如果考生选择了任何一个错误的选项,则不能得分.本 ...

  5. 个性化重排--Personalized Re-ranking for Recommendation

    推荐中的个性化重排--Personalized Re-ranking for Recommendation 这篇文章是阿里在ResSys'19发表的,主要贡献是在重排序阶段,引入了用户的相关信息,很符 ...

  6. (三)Django模板语言

    一.字典,列表,类在template模板中的使用 在视图函数中,即views.py中进行传值操作,可通过render方法,进行传值 from django.shortcuts import rende ...

  7. codevs 3981 动态最大子段和(线段树)

    题目传送门:codevs 3981 动态最大子段和 题目描述 Description 题目还是简单一点好... 有n个数,a[1]到a[n]. 接下来q次查询,每次动态指定两个数l,r,求a[l]到a ...

  8. Fabric1.4:链码管理与测试

    1 链码介绍 智能合约在 Hyperledger Fabric 中称为链码(chaincode),是提供分布式账本的状态处理逻辑.链码被部署在fabric 的网络节点中,能够独立运行在具有安全特性的受 ...

  9. 【Spark 内核】 Spark 内核解析-上

    Spark内核泛指Spark的核心运行机制,包括Spark核心组件的运行机制.Spark任务调度机制.Spark内存管理机制.Spark核心功能的运行原理等,熟练掌握Spark内核原理,能够帮助我们更 ...

  10. Java 使用Scanner时的NoSuchElementException异常

    做实验时设计了一个类,在类中的两个不同函数中分别创建了两个Scanner对象,并且在各个函数的结尾使用了close()方法,结果在运行时产生了NoSuchElementException异常. 实验的 ...