url全程是 统一资源定位符 uniform resource locator 我们可以根据这个地址定位到互联网上对应的资源
当我们访问一个网页时,如 http://www.baidu.com 这个网址包含四个部分的内容:
1)第一部分:协议类型 这里是http协议,如果是Https的服务器,那么其前缀将是https://或者当我们访问访问一个FTP站点时,前缀将会是ftp
2)第二部分:主机名 这里www.baidu.com,是域名,当然也可以是IP地址,两者是等价的。域名的使用只是为了帮助用户更容易地记住这个地址。就像人为什么需要取个名字一样,因为身份证号码太难记了。另外,对于域名www.baidu.com来说,是由两部分构成的,真正在互联网上能唯一标识的顶级域名部分是baidu.com,而www是该顶级域名的一个子域名,比如 baidu.com这个顶级域名下除了有www.baidu.com外,还有image.baidu.com或者 wangpan.baidu.com或者tieba.baidu.com等
3)第三部分:端口号
这里的端口号主要是指Web服务器开放出的端口号,当我们访问一个网站时,只给定主机名还不行,还必须指定端口号。因为一块网卡上可以分配1~65535(2的16次方)个端口,如果只指定主机名,相当于只能定位到这块网卡,但是不知道哪个端口,就无法进行通信,这本身是由TCP/IP协议决定的。就像我们寄信一样,不能只写说寄到成都孵化园,这样信肯定会收不到,还需要写清楚哪栋楼哪一层几号门,这样的地址才是完整的同样的道理,我们写信时还需要写明回信地址,否则将别人无法给我们回信,那么我们的回信地址也同样需要将地址写清楚。这就好比服务器给客户端响应一样,服务器也得知道客户端的IP是多
少,端口是多少吧,否则客户端将无法接收响应。但是我们每次访问网页的时候,并没有做这些事情其实这些事情都由浏览器帮我们代劳了,不需要我们关注端口的管理是由TCP协议来完成的而不是HTTP协议,这一部分内容前面已经讲解过。不过端口的分配有一些约定俗成的东西需要我们掌握,比如1~1024这一批端口通常都是知名的端口,由操作系统或常见服务所占用,1024以后的端口留给用户自由分配。一些最常见应用服务的默认端口:
HTTP协议:80
Https协议:443
FTP协议:21
SSH协议:22
MySQL数据库:3306
SQLServer数据库:1433
Oracle数据库:1521
那么为什么我们访问网站时没有输入任何端口号呢?是因为如果不指定端口号,浏览器默认以对应协议的端口与服务器建立连接
小贴士:通过域名或者ip我们可以确定唯一一个电脑 通过端口号我们就可以确定电脑上唯一一个服务
4)第四部分:页面文件 也就是我们要访问该服务器上的哪一个文件,当我们访问蜗牛学院时这个页面文件也没有专门输入。是因为我们访问的是网站的默认首页,每个网站的首页都会有一个默认首页,形如 index.php,dex.html, default. aspx一类的。其作用就在于如果不指定访问哪个页面文件,那么就直接访问个默认首页,这个页面位于哪里呢?当然位于网站的根目录下,在Web系统中,网站的根目录都使用“/”来表示,也就是紧挨着主机名后面的那个“/”表示根目录,再往下的一层一层的目录结构也使用“/”来进行分隔。所以我们仔细查看访问一个网站的过程会发现,我们输入www.baidu.com时,在浏览器中的地址栏会变成http://www.baidu.com/前面加上了http协议前缀,同时大家还需要注意到后面多了一个“/”,这就是网站的根目录。
5)附加部分:URL地址参数 URL地址参数并不需要应用于每一个URL地址,所以我们不把它作为URL地址的核心组成,但是我们也同样不能忽略它,因为很多安全性问题容易出现在这儿。标准URL地址的四部分是固定的,只有写对了这四部分才可以正常访问到一个网页,否则我们看到的将是HTTP响应的404错误:页面未找到。但是URL地址参数则是一个用户可以自行输入任意数据的地方,既然能任意输入,就免不了受到恶意输入的影响,如最典型的SQL注入方式之一就是利用了URL地址参数作为攻击的入口。类似于地址 https://www.baidu.com/s?wd=abc
?后面接的就是查询字符串参数 你把abc换成其他的值 就能在百度搜索对应的内容 多个查询字符串参数 &拼接 如:https://www.baidu.com/s?wd=abc&pn=10
pn是百度用来实现分页的
还有一些其他附加参数如 锚点 # 等