URL 与网络资源分享
Web
技术
前晚在整理 0xFFFF 的帖子的时候,意外地发现这一篇文:
这篇文其中提到了 internet 和 Web 的概念,引用如下:
中文世界一直混淆互联网(internet)和万维网(web)。人们念兹在兹的「互联网开放精神」,实乃万维网的开放精神。万维网的开放主要就体现在一点:任何万维网上的文章之间都可以通过网址随意互相链接。如果我想在文章里介绍 UbuWeb 这个网站,我就可以直接在 UbuWeb 这六个字母上添加它的网址 ubu.com。妳或许觉得这是废话,但在微信公众号的文章里妳做不到;妳只能添加微信生态圈内的链接,比如这个:
https://weixin.qq.com/cgi-bin/readtemplate?t=weixin_external_links_content_management_specification
这时候我突然反应过来,我过去其实一直没有区分清楚这里的概念的差别,World Wide Web,简称 WWW,中文“万维网”,又叫 Web,而不是 internet 这个只有物理意义的一层。加之如今移动互联网发达,许多刚接触网络的让,对于网络的了解可能仅限于微信、QQ 和各种各样的 APP,已不知道 WWW 为何物。我想应该尝试通过一些简单的语言,理一理其中涉及的概念。
关于万维网的种种
万维网(WWW),简单地说是一个在互联网(internet)上运行的一个巨型公开资源库。这里的资源可以是文字、图片、视频、音乐、各种文件等等,人们通过开启了 Web 服务的联网的计算机来提供资源,需要资源的人则通过某种方式,利用工具来连接提供资源的计算机,获得对应的资源。
这里所说的某种方式,也就是本文的主题 — URL(通常叫网址、链接)。
获取到的可以直接展示的资源,我们用的最多的是 超文本(Hypertext) 文档,也就是网页。除了基本的文字内容,它的内部可能会包含一些指向其他资源的 URL。这个指向其它资源的部分通常称作超链接(Hyperlink),日常大家都叫它“网址(web address)”、“链接(link)”。
网页中的超链接
现代网页的源代码(HTML)中超链接被命名为 Anchor,也就是“锚”。脑洞地说,于我们而言,我们上网就像是在在信息的海洋驾驶一艘船,锚便就是船在海洋中的一个个落脚点,在网络的海洋中,船的驾驶速度只发生在0.几秒之间,更多的时间是在抛锚之后的阅读中度过。
一个个超链接之间形成的错综复杂的连接关系,让 WWW 成为了全球最大的信息网络 。
World Wide Web Around Wikipedia
万维网毕竟还是依赖计算机,我们作为用户并不能直接访问,这里就有了 Web 浏览器来帮助我们做连接服务器、展示或者下载资源等等工作,作为我们在万维网世界中的代理角色(User Agent)。Web 浏览器做的,也正是通过某个URL,连接到资源的提供者,然后下载展示这个资源。
比如图片中的例子:
Web 浏览器
结合前面所说,一个 Web 浏览器在用户可见之处至少包含这三个部分:
- 地址栏:当前展示网页的 URL(网址)
- 导航:后退、前进、刷新、回到主页等等功能
- 展示网页内容的区域
URL是什么?
上面说了这么多 URL 这个术语,也知道它就是网址、链接,那它究竟是个什么呢?这里参考维基百科,做一个简单介绍。
URL,全名为 Uniform Resource Locator,中文名 统一资源定位器,形式上是一小段有特殊意义的字符串。三个字母分别为三个单词的缩写,对应了它的三个属性:
- Uniform: 统一的标准
- Resource: 针对某个特定 资源
- Locator: 定位器,也就是获取这个资源的途径和方法
以下是几个简单的 URL 的例子:
- http://www.baidu.com
- http://202.115.72.8:80/dzzn.htm
- http://202.115.72.8/dzzn.htm
- https://m.weibo.cn/u/1251000504?jumpfrom=weibocom
- https://zhuanlan.zhihu.com/p/22561084
- https://tools.ietf.org/rfc/rfc2616.txt
- https://cs50.harvard.edu/college/2019/fall/
- https://cs50.harvard.edu/college/2019/fall/guide.pdf
- ftp://ftp.freebsd.org/pub/FreeBSD/
对比一下,看似杂乱无章的一串字符之中,你可能会发现一些规律所在,没错,这里的规律,设计者最初是这样定义的:
URL = scheme:[//authority]path[?query][#fragment]
各个部分的解释如下:
- scheme: 资源的请求方法(使用的网络协议)
- authority: 关于需要请求的提供者的服务器的地址、端口信息
- path: 资源在提供者的服务器的路径
- query: 针对这个资源的查询参数
- fragment: 查询片段