其实是有的 , 端口号是80,只是它被隐藏起来了,我们看不到而已,而这个80端口也就是URL的默认端口号
但不是所有URL的默认端口号都是80,如果协议是http://,默认端口号为80,但若是https://协议,默认端口号就是443了
虚拟目录从第一个斜杠/开始,到最后一个斜杠/结束的那部分,也就是图中/app/user/那部分即为虚拟目录
它就类似我们电脑中文件目录的格式,第一个/为根目录,每多一个/就多进入一层目录
文件名从域名后开始算起的最后一个斜杠/开始,到?为止,没有?则到#为止 , 或者?和#都没有就是到整个URL结束为止的那部分就为文件名
说起来很绕吧,其实就是图中 info.do 这部分 , 它一般包含文件名和扩展名('.'后面那部分),用来指代一个URL所访问的具体文件或资源,它可以是图片、html文件、css文件 , 也可以是js文件、字体文件等等,它也可以不是某种文件 , 而是服务端后台执行的某段程序 。
甚至可以省略不写虚拟目录和文件名,因为它们本来就不是必须的,就如http://www.baidu.com这样的URL就没有文件名 , 但服务器会在缺省的情况下给你定位到某个特定的文件或程序上去 。
查询参数从?后到#结束,即图中的?uid=101&ty=2为查询参数
查询参数,也称为URL参数、查询字符串 , 英文名为 Query,它是用来向服务端以字符串的形式传递参数和少数数据用的
其参数形式一般都以多个键值对的形式进行表示,如 a=1、b=2就是两个键值对 , 键为"a"和"b",值为对应的"1"和"2", 多个键值对应&连起来:a=1&b=2
URL编码但参数要传递的某些值往往带有特殊字符,这些字符和URL标准的格式冲突,比如要传a&b这样字符串,和查询参数键值对的连接符&冲突了,若不加以区分就会产生歧义
而最简单的办法,就是对参数值进行编码 , 称为 URL Encoding,通过编码,a&b变成了a%26b,就不再包含会冲突的特殊字符
而有些参数即便有特殊字符,也不会被编码 , 除非自行强制编码,比如URL中参数值是另外一串URL,就可以写成 http://localhost/do?url=http://www.baidu.com这种特殊情况不会有歧义,因为计算机系统认得出参数是另一串URL,就会按URL的形式来解析 , 但当子URL又包含子参数和多子键值对的时候也难免会分不清参数到底是儿子的还是父亲的,这时还是强制编码的好
列表参数URL的参数是一个个键值对,即一个key对应一个value , 那如果是一个key要传递多个值,也就是一个列表咋办?也好办
URL的参数名是可以重复的,比如a=1&a=2&a=3,这里穿了3个参数名都为a的查询参数,是完全可以的,可以利用这种特性,按顺序将 1、2、3作为参数a的列表值
为了表示更清楚点,一般都会在列表参数名后面加上一对方括号[],如:a[]=1&a[]=2&a[]=3
但是,对于URL参数的写法和格式的标准,也没有特别严格的规定,以上几种形式一般都会支持
锚图中#后面那部分字符串,#abc就是锚部分
锚,英文称做Reference,通常也是用来传递参数等信息,但与查询参数的本质区别就是这部分内容不会被传递到服务器端
锚一般用于页面,比如在浏览网页的时候,按个按钮突然帮你定位到页首或页面中的某个位子去了,这就是锚
现在随着前后端分离技术,尤其是 vue、reactjs 等前端框架的兴起,锚作为前端javascript程序处理的参数载体也越来越重要了
结语URL看似已经习以为常、非常简单的东西 , 背后往往也隐藏着很多技术细节和知识点,甚至这短短一篇文章也没办法穷尽
推荐阅读
- 梦到修下水道 梦到修下水道是什么兆头
- 梦到自己穿绿色的衣服 梦到自己穿绿色的衣服是什么意思?
- 梦到掏下水道 梦到掏下水道是什么意思
- 梦到自己穿白色的衣服 梦到自己穿白色的衣服是什么意思
- 梦到老婆换衣服 梦到老婆换衣服什么意思
- 司凤真实身份是什么 司凤的真实身份
- 被借款人是什么意思 被借款人的含义
- 保险生存金什么意思 什么是保险生存金
- 统筹支付是什么意思 统筹支付是啥意思
- 梦到下水道好多的脏水 梦到下水道好多的脏水什么意思
