HTTP权威指南之URL与资源
前言
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?
答:
- 在资源中显式提供,有些资源会显式的提供基础url。如:html文档中可能会包含了一个定义基础url的html标记<BASE>,通过它来转换那个html文档中的所有相对url
- 封装资源的基础url,如没显式的找到基础url,可以将其所属资源的url作为基础url。简单理解就是:将该相对url超链接所在页面绝对url中的基础url作为其基础url。
- 没有基础url:只有相对url,但有时可能只是一个不完整的或损坏了的url

解析相对引用图
自动扩展URL
自动扩展:很多浏览器会在用户提交URL/输入URL时尝试自动扩展URL,这样为用户提供便捷,用户不需要输入完整的URL,浏览器自动扩展
自动扩展特URL特性
主机名扩展:只要有些小提示,浏览器就可以帮你将输入的主机名扩展为完整的主机名,比如:输入baidu,构建出www.baidu.com;弊端在于有时候会为其他http应用程序带来问题,比如代理,后面详细解释
历史扩展:将以前用户访问过的URL记录储存起来,当用户输入URL时将其与历史记录中的URL前缀进行匹配,并提供一些完整的选项供用户选择
字符
ASCII,中文是不支持的(当然,不止是中文这么简单,ASCII无法表示所有字符这才是硬伤)。为了使用ASCII,又要支持其他字符,所以,编码就来了。其实这种编码就是转义,使用A代表B(比如URL中包含的类似%7E符号,就是转义之后的,代表着~这个特殊符号)。另外,还有一些特殊的保留字符(就像C语言中的关键字一样),若在保留场合之外使用需要编码。下面列举了这些字符:
方案详解

HTTP权威指南之URL与资源的更多相关文章
- HTTP权威指南笔记-2.URL与资源
2.1 URI与URL.URN URL是浏览器寻找信息时所需的具体位置.URl是人们对HTTP和其他协议的常用访问点:浏览器指向一个URL,浏览器就会发送适当的协议报文向服务器获取内容. URI是一类 ...
- 《HTTP权威指南》学习笔记——URL和资源
URL与资源 URL是互联网资源的标准化名称 1.浏览互联网资源 URL是浏览器寻找信息时所需的资源位置 URI是一类更通用的资源标识符,URL是它的子集. URI的两个子集:URL和URN URL提 ...
- HTTP权威指南读书笔记(一)HTTP概述、URL和资源及报文详解
一.HTTP概述 1.WEB客户端和服务器. 2.资源:资源可以是各种格式的静态文件,也可以是应用程序. 3.媒体类型 4.URI:统一资源标识符 URL:统一资源定位符. URL的第一部分称为方案: ...
- HTTP权威指南-URL与资源
URL与资源 URL是URI的子集 方案(http),主机(www.baidu.com),路径(/home/logo.png) 方案,其实有很多,HTTP.HTTPS.FTP,SMTP等等. http ...
- Hadoop权威指南:从Hadoop URL读取数据
[TOC] Hadoop权威指南:从Hadoop URL读取数据 使用java.net.URL对象从Hadoop文件系统读取文件 实现类似linux中cat命令的程序 文件名 HDFSCat.java ...
- WebRTC 学习资源 电子书 WebRTC权威指南 Learning WebRTC
webRTC源码下载地址:https://pan.baidu.com/s/18CjClvAuz3B9oF33ngbJIw 提取码:wl1e 1.<WebRTC权威指南>第三版 中文版 本书 ...
- Http权威指南笔记(一) URI URL URN 关系
定义 URI:统一资源标识符(Uniform Resource Indentifier)用来标识服务器上的资源. URL:统一资源定位符(Uniform Resouce Locator)是资源标识符最 ...
- Android开发权威指南(第2版)新书发布
<Android 开发权威指南(第二版)>是畅销书<Android开发权威指南>的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45 章精彩内容供 ...
- URL与资源
资源推荐 1.HTTP权威指南. <HTTP权威指南>由古尔利所著,<HTTP权威指南>详细解释了HTTP协议,包括HTTP是如何工作的,如何用HTTP来开发基于Web的应用程 ...
随机推荐
- 解决Win10电脑右下角的“激活windows转到电脑设置”的水印的方法
Win10正式版的用户反馈新系统在使用一段时候后,自己电脑桌面右下角就突然出现了“激活windows10转到设置以激活windows”的水印字样.这是怎么回事呢?下面,我就向大家分享win10电脑右下 ...
- ML基础——搜索引擎与图书管理,百度与李彦宏
本文始发于个人公众号:TechFlow 谈及机器学习,大家想必会有许多联想,比如最近火热的人工智能,再比如战胜李世石的AlphaGo,甚至还会有人联想起骇客帝国或者是机械公敌等经典机器人电影. 但实际 ...
- java中发送http请求的方法
package org.jeecgframework.test.demo; import java.io.BufferedReader; import java.io.FileOutputStream ...
- JMM&Thread
1.概述 高效并发通过JAVA线程之间提高并发协调实现,在实现过程中需考虑硬件的效率和一致性,但在运算的过程中需要考虑处理器与内存的交互,所以基于高速缓存的存储交互解决的处理器与内存的方案,在对多处理 ...
- 008 Ceph集群数据同步
介绍,目前已经创建一个名为ceph的Ceph集群,和一个backup(单节点)Ceph集群,是的这两个集群的数据可以同步,做备份恢复功能 一.配置集群的相互访问 1.1 安装rbd mirror rb ...
- Iterator接口介绍(迭代器)
第一步 第二步 第二步用while 第二步用for循环(了解) 备注:
- $CH5104\ I-country$ 线性$DP$
CH Sol ”凸联通块“是什么意思呢? 其实就是图形的左端点先减小再增大,右端点先增大再减小 阶段 考虑到第k行,已经选了i个格子 状态 1.第i行的左端点与右端点 2.这一行的左端点相对于上一行的 ...
- 洛谷$2014$ 选课 背包类树形$DP$
luogu Sol 阶段和状态都是树形DP板子题,这里只讲一下背包的部分(转移)叭 它其实是一个分组背包模型,具体理解如下: 对于一个结点x,它由它的子结点y转移而来 在子结点y为根的树中可以选不同数 ...
- 1026 程序运行时间 (15 分)C语言
题目描述 要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock()函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间.这个时间单位是clock tic ...
- 2020面试还搞不懂MyBatis?快看看这27道面试题!(含答案和思维导图)
前言 MyBatis是一个优秀的持久层ORM框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创建statem ...