URL 是什么
URL (Uniform Resource Locator) 统一资源定位符,即网址。由协议 + 域名或IP + 端口号 + 路径 + 查询字符串 + 锚点 组成。
IP
IP (Internet Protocal) 互联网协议,非常底层,主要约定了两件事:
- 如何定位一台设备
- 如何封装数据报文,以跟其他设备交流
IP 分为外网和内网,由路由器作为外网和内网的唯一连通点。
路由器具有一个外网IP(运营商给的)和一个内网IP(路由器自己分配给自己的)。比如 14.17.32.211 就是一个外网 IP。这就是你在互联网中的地址。如果重启路由器,那么很有可能会被重新分配一个外网 IP,也就是说路由器没有固定的外网 IP(除非花钱买)。路由器会在家里创建一个内网,内网中的设备使用内网 IP,一般来说这个 IP 的格式为 192.168.xxx.xxx。
几个特殊的 IP:
- 127.0.0.1 表示自己
- localhost 通过 hosts 指定为自己
- 0.0.0.0 不表示任何设备
端口
一台机器可以提供很多服务,每个服务一个号码,这个号码就叫端口号 port。
- 80 端口:提供 HTTP 服务
- 443 端口:提供 HTTPS 服务
- 21 端口:提供 FTP 服务
- 一共有 65535 个端口 规则
- 0 到 1023 号端口是留给系统使用的
- 只有拥有了管理员权限后,才能使用这 1024 个端口
- 其他端口可以留给普通用户使用
- 比如 http-server 默认使用 8080 端口
- 一个端口如果被占用,就只能换一个端口 IP 和端口缺一不可,IP 用来定位一个设备,端口用来定位一个设备的服务。
域名
任何连上互联网的电脑都可以通过一个公共IP地址访问到,计算机可以很容易地处理这些IP地址,但是对一个人来说很难找出谁在操控这些服务器以及这些网站提供什么服务。IP 地址很难记忆而且可能会随着时间的推移发生改变。
为了解决这些问题,我们使用方便记忆的地址,称作域名(Domain names),所以,域名可以说是一个 IP 地址的代称。
ping xxx.com 可以查看域名对应什么 IP。
一个域名可以对应不同 IP:均衡负载,防止当访问量过大的时候,一台机器扛不住;一个 IP 可以对应不同域名:共享主机,穷开发者会这么做。
域名的结构
一个域名是由几部分(有可能只是一部分,也许是两部分,三部分...)组成的简单结构,它被点分隔,需要从右到左阅读。
- 顶级域名 TLD (Top-Level Domain):包含通用顶级域,例如 .com | .net | .org 和国家和地区顶级域 .cn | .us 等
- 二级域名 SLD(俗称一级域名,因为俗称不考虑顶级域名):baidu.com
- 三级域名(俗称二级域名):www.baidu.com
由TilmannR - 基于如下对象的个人作品:✦ Dns-raum.svg by Hank van Helvete✦ DNS-names-ru.svg by George Shuklin,CC BY-SA 2.5,commons.wikimedia.org/w/index.php…
一级域名是二级域名的父域名,二级域名是一级域名的子域名。比如,github.io 把子域名 xxx.github.io 免费给我们使用。
在同一个服务器上,使用不同的路径,就可以得到不同的页面。同一个页面,显示不同内容,使用查询参数:
- www.baidu.com/s?wd=hi
- www.baidu.com/s?wd=hello 同一个内容,定位到不同的位置,使用锚点:
- developer.mozilla.org/zh-CN/docs/…
- 锚点不支持中文,上例中 #参考书 实际会转化成 #%E5%8F%82%E8%80%83%E4%B9%A6
- 锚点是无法在开发者工具的 Network 面板看到的,因为锚点不会传给服务器
DNS
域名系统(Domain Name System),将域名和 IP 地址相互映射的一个分布式数据库。 DNS 请求如何工作?
- 在浏览器地址栏输入
mozilla.org。 - 浏览器询问计算机是否能识别此域名所对应的IP地址(使用本地 DNS 缓存)。如果是的话,这个域名被转换为 IP 地址,然后浏览器与网络服务器交换内容。结束。
- 如果计算机不知道
mozilla.org域名背后的 IP, 它会询问一个 DNS 服务器,这个服务器告诉计算机该域名所匹配的 IP。 - 浏览器与网络服务器交换内容。
nslookup命令,查看域名解析是否正常。
直接查询域名情况,例 nslookup www.163.com。
curl的用法
curl:客户端 (client) 的 URL 工具。
不带任何参数时,curl就是发出 get 请求。-v参数输出通信的整个过程。
curl -v http://baidu.com