浅析 URL

361 阅读5分钟

什么是URL?

首先我们先想想,为什么需要URL?

在李爵士发明的WWW里,WWW是由URL+HTTP+HTML组成的。

URL学名统一资源定位符,应该是这样子的一串东西:www.baidu.com/s?wd=hellow…

实际上,一个URL是由好几个部分组成的,我们拆分一下

【①https】://【②www.baidu.com】【③/s?】【④wd=hellow&rsv_spt=1】【⑤#5】

  1. 协议
  2. 域名
  3. 路径
  4. 查询参数
  5. 锚点

我们平时浏览一个网页,需要使用浏览器,然后通过URL来获取网页的所有信息并展示出来。

HTTP协议

  • 全称:HyperText Transfer Protocol

  • 译作:超文本传输协议

  • 作用: 约定一个发送请求和接受相应的协议

域名

  • 域名是什么?qq.com

  • 域名就是对IP的别称

  • baidu.com 对应什么IP ping baidu.com

  • qq.com 对应什么IP ping qq.com

  • 知识点

    1. 一个域名可以对应不同IP
    2. 这个叫做均衡负载,防止一台机器扛不住
    3. 一个IP可以对应不同域名
    4. 这个叫做共享主机,穷开发者会这么做

IP

Internet Protocal

主要约定了两件事:

  1. 如何定位一台设备
  2. 如何封装数据报文,以跟其他设备交流,具体内容我们不关心

只要你在互联网中,你就有至少一个独特的IP

  • IP分为内网和外网
    • 外网:电信DNS服务器,电信其他用户(百度,腾讯等)
    • 分界线:路由器
    • 内网:玩电脑的你,玩手机的你

外网IP

  • 从电信租用带宽(并且拥有了猫,猫负责转换成路由器能理解的信号)
  • 你买了一个路由器,然后用电脑和手机分别连接路由器广播出来的无线wifi
  • 只要路由器脸上电信的服务器,那么路由器就会有一个【外网IP】,比如【14.17.32.211】就是一个外网IP。这就是你在互联网中的地址。
  • 但是如果你重启路由器,那么你很有【可能】被重新分配一个【外网IP】,也就是说你的路由器没有【固定的外网IP】
  • 但是有个问题,你的路由器的外网IP如果是14.17.32.211,那么你的搜集和电脑的IP又是什么呢?答案是【内网IP】

内网IP

  • 路由器会在你家里创建一个内网,内网中的设备使用内网IP,一般来说这个IP的格式都是 192.168.xxx.xxx。
  • 一般路由会给自己分配一个好记的内网IP,如192.168.1.1
  • 然后路由会给每一个内网中的设备分配一个不同的内网IP,如电脑是192.168.1.2,手机是192.168.1.3,以此类推。

路由器的功能

  • 现在路由器有两个IP,一个外网IP和一个内网IP
  • 内网中的设备可以互相访问,但是不能直接访问外网
  • 内网设备想要访问外网,就必须经过路由器中转
  • 外网中的设备诶互相访问,但是无法访问你的内网
  • 外网设备想要把内容送到内网,也必须通过路由器
  • 也就是说内网和外网就像两个隔绝的空间,无法互通,唯一的联通点就是路由器
  • 所以路由器有时候也被叫做【网关】

几个特殊的IP

分别是

  • 127.0.0.1 表示自己(规定死的)
  • localhost 通过hosts 指定为自己(可以自己改)
  • 0.0.0.0 不表示任何设备

有了IP和域名,就能通过DNS联系起来

DNS
全称 Domain Name System,
译作:域名系统or域名解析系统

  • 当你输入baidu.com的时候

过程

  • 你的Chrome浏览器会向电信/联通提供的DNS服务器询问baidu.com对应什么IP
  • 电信/联通会会打一个IP(具体过程很复杂,不研究)
  • 然后Chrome才会想对应IP的80/443端口发送请求
  • 请求内容是查看baidu.com的首页
    PS:自己查:在cmder里nslookup + 域名

为什么是80或443端口

  • 服务器默认用80提供http服务
  • 服务器默认用443提供https服务
  • 你可以在开发者工具里看到具体的端口

题外话

  • WWW

www.xxx.com和xxx.com不是同一个域名

  • 他们是什么关系
    • com 是顶级域名
    • baidu.com 是二级域名(俗称一级域名)
    • www.xxx.com是三级域名(俗称二级)
    • 他们是父子关系
    • github.io 把子域名 xxx.github.io免费给你使用
    • 所以你应该知道www.xxx.com和xxx.com可以不是同一家公司,也可以是。
    • www是多余的吗,是的,非常多余

根据不同域名选择不同的服务器,服务器选好了,如何请求不同的页面呢?

  • 路径可以做到

    • https:xxx.com/123/456
    • https:xxx.com/123/987
  • 工具

    • 使用Chrome开发者工具Network面板看看区别

同一个页面,不同内容?

  • 查询参数可以做到

www.baidu.com/s?wd=hi
www.baidu.com/s?wd=hello

也就是说同一个页面但是查询的内容不同

同一个内容,不同位置?

  • 锚点可以做到

developer.mozilla.org/zh-CN/docs/…
developer.mozilla.org/zh-CN/docs/…

  • 注意
    • 锚点看起来有中文,实际不支持中文
    • #参考书会变成#%E5%8F%82%E8%80%83%E4%B9%A6
    • 锚点是无法在Network面板看到的
    • 因为锚点不会传给服务器

总结

  • 上网看网页,就是使用浏览器这个客户端,输入URL来达到访问某个网页的目的。
  • 当然这个过程背后的部分就包含了http协议,IP,DNS这些知识,对于一般用户来说不需要关心
  • 一个URL包括了协议,域名,路径,查询参数,锚点
  • 比较重要的是我们常用的http,https协议,以及我们平时接触最多的域名这两个知识点