URL基本格式
< scheme>://< user>:< password>@< host>:< port>/< path>;< params>?< query>#< frag>
通用的URL组件
组件 | 描述 | 默认值 |
---|---|---|
方案 | 获取资源要使用的协议 | 无 |
用户 | 用户名 | 匿名 |
密码 | 跟在用户名后面,用冒号(:)隔开 | <e-mail地址> |
主机 | 主机名或者ip地址 | 无 |
端口 | 各个方案特有的默认端口 | 方案特有 |
路径 | 可以多个,以斜杠(/)分割,可以加参数([;params]) | 无 |
查询 | ?name=bob&age=3 | 无 |
片段 | #title,只是给浏览器识别,不能分割资源 | 无 |
方案
不区分大小写,http与HTTP是一样一样的
主机与端口
既可以是域名,也可以是ip地址
用户名与密码
用户不填就是匿名,并发 送一个默认的密码( Internet Explorer 会发送 IEUser, Netscape Navigator 则会发送 mozilla)
路径
路径参数在每个路径段都可以有
eg: http:// www. joes- hardware. com/ hammers; sale= false/ index. html; graphics= true
查询字符串
eg: https://baike.baidu.com/item/URL%E6%A0%BC%E5%BC%8F/10056474?fr=aladdin
片段
#锚点,给客户端识别用的,并不能切割资源
相对URL(举个栗子)
xxx/xxx.html node_modules目录or当前目录(看解析方式)
/xxx/xxx.html 根目录
./xxx/xxx.html 当前目录
../xxx/xxx.html 上级目录
../../xxx/xxx.html 上上级目录
自动拓展URL
主机名拓展 与 历史拓展(浏览器的甜点)
baidu => www.baidu.com
令人头痛的的字符
设计url的人希望可以被人类阅读,又不希望丢失不可见,不可打印的字符,于是需要对不安全的字符进行转义。
不安全的字符: 尼玛其实就是老外不认识的字儿,比如我们汉字目录,有些程序不识别,就会报错,就不安全咯!当然不止这些咯
方案的世界
方案 | 描述 |
---|---|
http | 默认端口:80 http://< host>:< port>/< path>?< query>#< frag> |
https | 默认端口443 格式同上 |
mailto | mailto: joe@ joes- hardware. com |
ftp | 基本格式: ftp://< user>:< password>@< host>:< port>/< path>;< params> 示例: ftp:// anonymous: joe% 40joes- hardware. com@ prep. ai. mit. edu: 21/ pub/ gnu/ |
rtsp ,rtspu | RTSP URL 是可以通过实时流传输协议( Real Time Streaming Protocol) 解析的音/ 视频媒体资源的标识符。 方案 rtspu 中的 u 表示它是使用 UDP 协议来获取资源的。 基本格式: rtsp://< user>:< password>@< host>:< port>/< path> rtspu://< user>:< password>@< host>:< port>/< path> 示例: rtsp:// www. joes- hardware. com:554/ interview/ cto_video |
file | 在桌面建个html文件,双击就可以在浏览器看到效果 |
news | 用来访问新闻与新闻组 news:< newsgroup> news:< news- article- id> 示例: news: rec. arts. startrek |
telnet | 用于访问交互式业务 |
展望未来
URL的缺点是,路径对应文件,移动文件这个URL就失效了.
URN 一个名字对应一个文件,不管文件在哪个服务器,感觉有点MD5的味道
PURL 永久统一资源定位符,URL对URN的实现,中间加入一个寻址层,文件变动需要在这里注册,实现实时更新地址