文件名从域名后开始算起的最后一个斜杠/开始 , 到?为止 , 没有?则到#为止 , 或者?和#都没有就是到整个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看似已经习以为常、非常简单的东西 , 背后往往也隐藏着很多技术细节和知识点 , 甚至这短短一篇文章也没办法穷尽
【什么是根目录文件夹什么是根目录】其实URL的内容还有不少 , 比如<用户名>@<密码>这种用户验证信息在URL中的传递 , 由于篇幅的关系还没有讲到
所以我讲分几篇文章来讲解HTTP协议的其中几个重要部分 , 如果这一系列文章对你有帮助 , 别忘了关注哦~
推荐阅读
- 东林党大多是正直的读书人,为什么有人说明亡于东林党?
- 苹果11pro屏幕显示 11pro为什么比xr屏幕显示
- 公积金贷款多少时间可以卖,公积金贷款卖方什么时候能拿到钱
- 为什么宠物店洗狗很香,宠物店洗狗累吗?
- 什么轮胎比较好用 什么轮胎比较好?
- 量比是什么意思 委比是什么意思
- 人艰不拆是什么意思,人艰不拆百度百科?
- 君子兰烂根还有救吗 君子兰烂根后有救吗?如何救?
- 2023年养老保险缴费标准是多少 养老保险缴费标准是多少
- 排卵期是什么时候测比较准 排卵期是什么时候