前言

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中所有需要的内容,并对这些内容进行详解

<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 的其余部分分隔开来

实例

# 方案;需注意,协议是不区分大小写的
http://www.baidu.com
HTTP://www.baidu.com # 主机与端口;主机指向服务器,端口指向服务
http://www.baidu.com:80 # 用户名与密码;
ftp://anonymous@ftp.prep.ai.mit.edu/pub/gnu
ftp://anonymous:my_passwd@ftp.prep.ai.mit.edu/pub/gnu
http://joe:joespasswd@www.joes-hardware.com/sales_info.txt # 路径
http://www.baidu.com/Images/index.html # 参数;这个例子有两个路径段,hammers和index.html。hammers路径段参数有sale,其值为false;index.html段有参数graphics,其值为true。
http://www.baidu.com/hammers;sale=false/index.html;graphics=true # 查询字符串;查看编号为12731的字段内容是否存在
http://www.baidu.com/inventory-check.cgi?item=12731 # 片段;片段组件用来表示一个资源内部的片段,比如URL指向HTML文档中一个特定的图片或者小节
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语言中的关键字一样),若在保留场合之外使用需要编码。下面列举了这些字符:
 
 

方案详解

最新文章

  1. MVVM开发模式简单实例MVVM Demo【续】
  2. SqlDataReader读取分页数据,pageCount你是肿么了?
  3. pb中sql语句用to_char查询出来数据,居然无法检索出数据,oracle数据库,这是什么原因?
  4. php对图片反色处理
  5. Java注解的简单了解
  6. POJ 1850 Code(找规律)
  7. 在线QQ客服
  8. C语言-基础
  9. 案例:Oracle报错ASM磁盘组不存在或没有mount
  10. PyInstaller安装使用方法
  11. php 把数组保存为标准的数组格式,存储到文件中
  12. Java的课后作业——18.10.18
  13. 关于MySQL慢日志,你想知道的都在这
  14. c# XML 有多个重复子节点操作
  15. 微信小程序——获取元素的宽高等属性
  16. python3学习笔记.4.turtle绘图
  17. Eclipse 安装spring插件spring tool suite(STS)
  18. asp.net core + log4net+exceptionles+DI
  19. spring aop实现拦截接口请求打印日志
  20. EDM模板制作规范

热门文章

  1. 21.time和random
  2. 支撑百万级并发,Netty如何实现高性能内存管理
  3. CodeForces - 786B -- 线段树优化建图
  4. Django 博客实现简单的全文搜索
  5. spring boot的application配置文件
  6. 2019 年百度之星 初赛一 1002 Game
  7. Vim区块选择
  8. static和final关键字
  9. SQL Server2012高可用之日志传送测试
  10. dp-完全背包(题)