URL的组成部分
URL的组成有:协议、域名、路径、查询参数、锚点。接下来将依次分析这五部分。
协议
主要有HTTP协议和HTTPS协议,HTTP协议默认使用端口号80, HTTPS协议默认使用端口号443
域名
ip
ip地址是用来定位互联网世界中的一台设备,每个上网的设备都有自己独立的IP地址
IP分为外网IP和内网IP
可以用Ping命令查看域名的IP地址
如上图,域名taobao.com对应的IP地址是140.205.220.96
还可以用nslookup查看域名的ip地址:
端口
一台服务器可以提供很多服务,每个服务有不同的号码,这个号码就是端口。类似于,在麦当劳点餐,有咖啡窗口、快餐窗口、甜品站窗口,只能在咖啡窗口点咖啡、甜品站窗口点甜品。
一台机器可以提供很多不同的服务
- 80端口:HTTP服务
- 443端口: HTTPS服务
- 21端口: FTP服务
域名
域名是IP的别称
一个域名可以对应多个IP, 这叫负载均衡,防止一台机器无法同时为大量用户提供服务
不同地区ping taobao.com会看到不同的ip地址
一个IP也可以对应多个域名,这叫主机共享
域名通过 DNS 解析成 IP
当你输入www.baidu.com
chrome浏览器会向电信/联通提供的DNS服务器询问www.baidu.com对应什么IP
然后电信/联通会回复一个IP
然后chrome浏览器会向对应IP地址的80/ 443端口发送请求
服务器默认用80端口提供HTTP服务
服务器默认用443端口提供HTTPS服务
请求内容是查看www.baidu.com的首页
关于域名的其他知识
www.baidu.com和baidu.com是不同的域名
- .com是顶级域名
- baidu.com是二级域名(俗称一级域名)
- www.baidu.com 是三级域名(俗称二级域名)
- 所以www.baidu.com是baidu.com的子域名
- 例如,github.io是github的域名, userid.github.io是每个用户的域名
路径
如何请求同一服务器上不同网页?
用路径即可
路径是没有必要有后缀的
https://developer.mozilla.org/zh-CN/docs/Web/HTML
https://developer.mozilla.org/zh-CN/docs/Web/CSS
查询参数
请求同一个页面,能得到不同内容吗?
用查询参数即可
http://www.baidu.com/s?wd=hello
锚点
同一内容,不同位置?
用锚点即可
https://developer.mozilla.org/zh-CN/docs/Web/CSS#教程
锚点不支持中文,会把中文进行编码
注意!
锚点不会经过服务器,因为是本地内容
所以服务器不会阅读井号 # 之后的内容,不可以拿这个传参数!
URL举例
最后我们再来看看URL的不同部分
https默认用443端口
所以www.baidu.com 等同于 www.baidu.com:443
curl使用示例
curl -v http://www.baidu.com
整个过程:
向DNS查询域名对应的IP地址
建立TCP连接,TCP连接建立好之后,开始发送HTTP请求
下图中以大于号开始的
GET / HTTP/1.1到 > Accept: /是请求头
之后服务器会发送回来一个响应
分为响应头和响应体
以下内容是响应头
响应体就是HTML页面
响应结束后,关闭TCP连接
HTTP请求结束