URL 的组成部分
URL ( Uniform Resource Locator 统一资源定位符 ) 由协议+域名或IP+端口号+路径+查询字符串+锚点组成
HTTPS 默认使用443端口,所以 www.baidu.com 等同于 www.baidu.com:443
协议 ( Portocal ):主要有 HTTP 协议和 HTTPS 协议,HTTP 基于 TCP + IP 两个协议
域名 ( Domain Name ):域名是对 IP 的别称,一个域名可以对应不同的 IP , 这个叫做均衡负载,防止一台机器扛不住;一个 IP 可以对应不同域名,这个叫做共享主机,穷开发者会这么做
使用 Ping 找到域名对应的 IP
ping baidu.com 正在 Ping baidu.com [39.156.69.79] 具有 32 字节的数据: 来自 39.156.69.79 的回复: 字节=32 时间=27ms TTL=49 来自 39.156.69.79 的回复: 字节=32 时间=27ms TTL=49 来自 39.156.69.79 的回复: 字节=32 时间=26ms TTL=49 来自 39.156.69.79 的回复: 字节=32 时间=26ms TTL=49 39.156.69.79 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 26ms,最长 = 27ms,平均 = 26ms
IP (Internet Protocal) 主要约定了两件事:1.如何定位一台设备 2.如何封装设备报文,以跟其他设备交流。
IP 分为内网和外网,路由器连上电信服务器,会有两个 IP ,一个 [ 外网IP ] ,比如 [ 14.17.32.211 ] ,如果重连路由器,可能会被重新分配一个 [ 外网 IP ] ;一个 [ 内网IP ] ,一般来说这个 IP 格式是 [ 192.168.xxx.xxx ] 。
- 内网中的设备可以互相访问,但是不能直接访问外网
- 内网设备想要访问外网,就必须经过路由器中转
- 外网中的设备可以互相访问,但是无法访问你的内网
- 外网设备想要把内容送到内网,必须通过路由器
- 内网和外网就像两个隔绝的空间,无法互通,唯一的联通点就是路由器,所以路由器有时候也被叫做 [ 网关 ]
- IP 最大是255
几个特殊的 IP
- 127.0.0.1表示本机
- 默认127.0.0.1的域名是localhost
- 可以在HOSTS文件里可以更改本地127.0.01 的域名
- 0.0.0.0 不表示任何设备
科普
- www.xxx.com 和 xxx.com 不是同一域名
- com 是顶级域名
- xxx.com 是二级域名(俗称一级域名)
- www.xxx.com 是三级域名(俗称二级域名)
- 他们之间是父子关系,可以是同一家公司,也可以不是
- www 是多余的
端口 ( Port ):TCP/IP 协议中传输层的概念,用于区分同一台主机中的不同应用。IP 和端口缺一不可
一台机器可以提供很多不同的服务
- 80端口:HTTP服务
- 443端口: HTTPS服务
- 21端口: FTP服务
端口的使用规则
- 0到1023 (2的10次方减1)号端口是留给系统使用的
- 你只有拥有了管理员权限后,才能使用这1024个端口
- 其他端口可以给普通用户使用,比如http-server默认使用8080端口
- 一个端口如果被占用,你就只能换一个端口
路径 ( PATH ):请求同一路径上的不同网页
- 路径是没有必要有后缀的
- 可以使用 Chrome 开发者工具 Network 面板查看区别
查寻参数 ( Query Parameter ):请求同一个页面得到不同的内容
s(百度的搜索页面)
?wd=hi(查询参数)
&pn=10 (每页10个结果,当 &pn=10 时,查看第10个结果之后的内容)
锚点 ( anchor ):同一个页面在不同的位置
- 锚点看起来有中文,实际不支持中文
- #参考书会变成 #%E5%8F%82%E8%80%83%E4%B9%A6
- 锚点是无法在Network面板看到的,因为锚点不会传给服务器
https://developer.mozilla.org/zh-CN/docs/Web/css #参考书
https://developer.mozilla.org/zh-CN/docs/Web/Css #教程
DNS ( Domain Name System ):将域名和 IP 地址对应起来
过程
- 浏览器像电信/联通提供的 DNS 服务器询问网站对应什么 IP
- 电信/联通会回答一个 IP
nslookup baidu.com 服务器: phicomm.me Address: 192.168.2.1 非权威应答: 名称: baidu.com Addresses: 220.181.38.148 39.156.69.79
- 浏览器会像对应 IP 的80/443端口发送请求
- 请求内容是查看网站的首页
curl 命令
用 curl 可以发 HTTP 请求
- curl -v http://www.baidu.com
- curl -s -v -- https://www.baidu.com
整个过程
curl -v http://baidu.com * Trying 220.181.38.148:80... * TCP_NODELAY set * Connected to baidu.com (220.181.38.148) port 80 (#0) > GET / HTTP/1.1 > Host: baidu.com > User-Agent: curl/7.65.3 > Accept: */* > * Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < Server: Apache < Date: Tue, 22 Jun 2021 12:57:50 GMT < Content-Type: text/html < Content-Length: 81 < Connection: keep-alive < Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT < ETag: "51-47cf7e6ee8400" < Accept-Ranges: bytes < <html> <meta http-equiv="refresh" content="0;url=http://www.baidu.com/"> </html> * Connection #0 to host baidu.com left intact
- 先请求 DNS 获得 IP
- 进行 TCP 连接
- TCP 连接成功后,开始发送 HTTP 请求
- 请求内容看一眼
- 响应内容看一眼
- 响应结束后,关闭TCP连接( 看不出来 )
- 真正结束
HTTP ( HyperText Transfer Protocol) 就是规定请求的格式是什么,响应的格式是什么
*本文为鲲游北冥的原创文章,著作权归本人和饥人谷所有,转载务必注明来源