把URL五马分尸

起点学院产品经理365成长计划,2天线下闭门集训+1年在线学习,全面掌握BAT产品经理体系。了解详情

url

你一定每天工作显得很忙,你一定各种资讯、八卦、娱乐信息一条不漏,下班后感觉一天头昏脑胀,好像并没有真正干什么事情,有木有?

不知道你啥样,我基本每天早九晚九,浑浑噩噩,但是好像八卦一个都没落下。

你每天打开几十个页面,是否观察过它们的Url地址?今天带你“庖丁”解牛(庖丁两个字带了引号哦,你应该可以看出我是个很谦虚的人),让Url跳段脱衣舞,把它拆开细细和每个部分谈谈。

一个标准的Url地址由这几部分组成,protocol,hostname,port,path,parameters,query组成,这样显得太干巴了,还是举个栗子来说明。

照葫芦画瓢,我们按照刚才说的几个部分来拆解一下,杜撰一个链接如下:

http://news.qq.com/a/20160209/012154.htm?a=1&b=2&c=3

Protocol

指 http:// 这部分,是协议的意思,协议就是一套规则,它定义了数据如何封装、打包、拆包和解释的规则,比如我答应过你,只爱你一个人,就是一套协议,我们两个人的交往都是按照这套规则来进行的,我同时找两个妹子,你就可以说我没有按照我们之间的协议来恋爱了。也即只有通过http这套规则访问这个页面资源。你是否还见过https、ftp、thunder这些协议头,Url地址标识一个资源,你可以通过不同的规则(协议)访问到它,当然前提是存放这些资源的服务器支持这个协议。

一个剧院,座位位置被看做资源,看客只有获取到这个资源,才能看到这个剧目。现在过年,人比较多,为了防止发生踩踏事件,不但开放正门,还多开放两个侧门。我们脑补一下,观众的票面上标识了什么信息,一定有座位的信息(几排几号),也即相当于Url的后半部分,但是这个Url的协议头,有的票面标了从正门进,有的标识了从侧门进,这就相当于协议,一种是走正门的规则进入,另一种是走侧门的规则进入,你拿着走正门的票从侧门进入,应该是被拒绝的(正常情况下,大家都是拒绝后入的呢),否则你无法获取到最终的资源(座位),所以采用何种协议,至关重要。前面所讨论的前提都是要侧门开放,也即服务器支持这种协议,不开放侧门,你的地址就是失效的哦,访问不到这个资源。

这部分就介绍完了,总之,协议头标识了用什么规则访问具体的资源,以后你看到不同的协议头,就想想这个例子。当然你也可以设计一个协议,比如叫abc://也是可以的,这种就是自定义协议。

Hostname

Hostname称为主机名,在例子中的Url中,news.qq.com就是Hostname,主机可以理解为一台机器的名字叫news.qq.com,这台主机在qq.com这个域名下,qzone.qq.com也在qq.com这个域名下,还有很多比如v.qq.com等等。

其实我所理解的,主机名跟域名是差不多的意思,反正我是一直没区分开来理解,好像理解成一个意思,好像也没出什么错。

顺便介绍下qq.com叫做一级域名,尤其国内很多人认为www.qq.com是一级域名,其实大错特错,它只不过是一个二级域名。www等同于刚才说的news。

www.qq.com/news.qq.com/qzone.qq.com/v.qq.com分别都是二级域名。

Path

/a/20160209/012154.htm,在host后面的一长串全部叫做path,翻译过来就是路径的意思。就是最终文件所在的路径和文件名。例如:在我的电脑中,有一个路径存储着一些我喜欢的电影(F:\CCAV\波多野结衣\1.avi),只不过此地址是在我的本地电脑上,而上面的那个路径是存储在腾讯的服务器,也即news.qq.com这个域名下的若干台机器上中的。

Parameters

?a=1&b=2&c=3,这一部分称为参数,也叫查询。它的目的是在Url中带上去一些本地的信息传给服务器,a、b、c三个字符是我为了理解简单杜撰的(在baidu的Url中的参数是这样的:?ie=utf-8&f=8&rsv_bp=1&tn=baidu),这些Key-Value的键值对标识了一些特定的意义,但最终是要服务器进行判断处理的。其中参数部分加上一些你随便填写的值并不会出错,比如加上&d=4,只不过服务器不解析这部分罢了。

Port

Port称为端口号,一般http的端口号为80,https为443,可以理解为计算机可以有很多个提供服务的点,比如可以用默认的80端口来提供服务,同时也可以用81来服务。把一个主机比喻成一间房子的话,那么这间房子可以有65536个门,门就是端口号,这么多端口都可以达到进出的目的。我们上面的Url没有写任何的端口号,即默认为80。http://news.qq.com:8080/a/20160209/012154.htm?a=1&b=2&c=3#p=1,这个Url指定了从8080这个端口号,也即从这个门访问资源,那这个网页服务器必须在这个端口首先部署服务(也就是先把门打开,才能提供服务),才能供用户访问。

不管再长的Url都是由这几个关键部分组成的,只要你会分割出上面介绍的几个主要部件,就能看出各部分的意义,这是互联网的基本功,希望亲们能够理解。

#专栏作家#

给产品经理讲技术,微信公众号(pm_teacher),人人都是产品经理专栏作家。资深程序猿,专注客户端开发若干年,对前端、后台技术略懂,热衷于对新的科技领域的探索。

本文原创发布于人人都是产品经理,未经许可,不得转载。

您的赞赏,是对我创作的最大鼓励。

评论( 5

登录后参与评论
  1. 看每部分都要返回去瞅瞅杜撰的那个域名,用户体验哪去了。。。 :arrow:

    回复
  2. 标题取的太抽象了,感觉对这类问题不敢兴趣的人不会点进来看啊。 :arrow:

    回复
  3. 少说一个query

    回复
    1. 回复

      query就是问好,疑问的意思
      regeist?a=1&b=2&c=3
      这个?前面regeist其实是个方法名,而abc则是这个方法所需要的参数
      a=1就是第一个参数
      b=2就是第二个参数
      c=3就是第三个参数
      传递了这么一组数据给服务器,服务器接收到了数据,进行了处理

    2. 回复

      啊,扫噶!
      多谢多谢! :grin:

加载中