url通用格式

<协议>://<用户名>:<密码>@<主机域名或者ip地址>:<端口号>/<路径>;<参数>?<查询>#<片段>

其中最重要的是<协议><主机域名><路径>

总之,url(统一资源定位符)的作用就是通过浏览器发送给服务器,告诉服务器我们想要什么资源在什么位置,并发送给我们的浏览器,通过上边的格式,我们举几个例子:

http://www.baidu.com:80/main/index.html

这是一个简单的例子,有协议http,主机域名www.baidu.com,资源路径/main/index.html,其它部分都可以省略

下面是一个复杂的例子,我们结合下边这个例子具体介绍每一部分的作用和用法

http://joe:password@www.baidu.com:80/main/index.html;type=a;color=b?name=bob&id=123#main

协议

访问的协议可以是http(超文本传输协议)、ftp(文件传输协议)、rtsp(实时流传输协议)、telnet(远程登陆访问)等。每个协议都遵循上述格式,只是有些协议的一些部分没有,如telnet协议就没有<参数>,<查询>,<片段>这几部分。

其中http也可以写做HTTP,大小写不影响

用户名和密码

例子中的用户名和密码是joe:password。比如我们使用ftp协议传输时就需要输入用户名和密码,但是我们的http协议中,如果把用户名和密码就放在url里,那很不安全,所以一般放在cookie里,这里就不详细说了,总之就是不经常使用。

主机域名或者ip地址、端口

例子中的主机域名和端口是www.baidu.com:80,http协议的默认端口是80,端口就是开放服务的地方,我的前边的文章有讲过。

url中除了使用主机域名,还可以用ip地址,如可以写做:

http://163.177.151.109:80/main/index.html

路径

路径就是文件路径,和我们文件管理器的命名方法一样,就是\ /不一样

例子中的路径是/main/index.html  表示在根文件目录里的main文件夹里的index.html文件,“/”表示根目录,“./”表示该文件上一级目录。

路径有绝对路径和相对路径,在html网页中我们使用相对路径,浏览器会自动帮我们补全。比如我们在基础html网页(http://www.baidu.com/main/index.html)中写一个相对路径(./img.jpeg),./意思是当前main目录下的文件,相当于我们访问(http://www.baidu.com/main/img.jpeg)

关于相对路径,可以看这篇文章绝对路径与相对路径

参数

参数(params)一般使用“;”与路径分开,如果有多个参数也使用“;”分隔开。例子中的参数有两个,分别是type和color;type=a;color=b

我们访问一些资源,只有路径端口是不够的,有时候需要向解析url的应用程序提供参数才能去访问资源,如参数可能会定义传输格式等等。

查询

查询(query)使用“?”与前边的东西分开,如果有多个查询的问题,需要使用“&”连接。

访问一些资源时,有些需要查询数据库进行搜索来缩小请求资源范围,就像我们查东西时指定关键字一样,例子中的查询语句是?name=bob&id=123

意思是,在该路径下,查询name=bob,id=123的资源。

片段

我们访问资源时,可以不直接访问该资源,而是访问资源的一部分。比如我们访问一本书,可以直接指定访问某一部分。片段用“#”与其它东西分开,后边写指定部分的名字。如例子中的#main,表示访问资源/index.html 中的名字叫做main的部分。

但,其实http服务器仍然是把整个对象资源发给你的浏览器,浏览器获得整个资源后,根据片段显示你要的资源。

url编码

先看看现实中的url编码。我们看csdn中的文章时,看一下文章的url就会发现有很多%和16进制数字,跟我们上边说的格式一点都不一样。

这是因为url要同一命名网上的所有资源,还要通过不同的协议传输这些资源,那么我们的url要避开别的协议的编码机制,成为独一、完整、可移植性、可读的安全编码。

因此就出现了“转义”编码机制,这种转义表示法包括一个%和两个表示字符ascii码的16进制数

当我们的url中出现一些可能在传输时不安全,被别的机制编码的情况时,我们就提前使用“转义”编码机制进行编码

//当我们的url有“~” “ %”时,要给他们编码

下边的图显示了哪些字符需要编码:

使用受限的字符就是不安全的,在url上使用时,我们需要给他编码。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐