问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

HTTP基础系列之:一文搞懂URL

发布网友 发布时间:2022-11-18 16:27

我来回答

1个回答

热心网友 时间:2024-09-27 16:06

一般我们日常在上网的时候,会在浏览器的地址栏里输入一个网站的 "网址",点击下回车,就会跳到你想去的网站,就类似这样

但其实,叫做 "网址" 并不是特别的准确,确切的说,应该叫做 URL

那到底啥是 URL 呢? 不就是一个网址吗?

URL 是英文 Uniform Resource Locator 的缩写,即统一资源定位器,是因特网上用于指定信息位置的表示方法,通过它就能找到网上的某个你要的资源

虽然我们平时使用浏览器的时候,只要输入.com或者qq.com就能正常上网了,但其实我们输入的只是整个URL中的一小部分

来,我先看看一个相对完整的URL的整体结构是怎么样的

这里大致分了几个部分,我们一个个来看,它们具体是干什么的

图中http://这部分就是协议部分,即指定了URL是以什么协议发送网络请求的

常见的协议如:http://、https://、ftp://、file://,比如:http://就是超文本传输协议,平时上网大多用这个协议,https://是以安全为目标的HTTP协议。

图中localhost就是地址部分,用来确定URL所要访问的服务器的网络地址(也就是网址)。在URL中,地址可以用三个形式来表示:域名、主机名、IP地址

我们平时输入的www.baidu.com、www.qq.com就是域名,域名也分一级域名、二级域名、以及顶级域名。

顶级域名 :在域名的尾巴部分,.com这种就是顶级域名,顶级域名一般都代表网站属于某种机构或组织。像.com(商业机构)、.org(非盈利组织)、.gov(*机构)这类就是常见的顶级域名,除此之外,还有些代表国家的顶级域名,如:.cn(中国)、.us(美国)、.jp(日本)等等

一级域名 :像qq.com就是一级域名,看上去十分简洁,在顶级域名.com前只有一个单词短语

二级域名 :而mail.qq.com和v.qq.com这种前面加了mail.、v.等字符串的就叫二级域名

不过,域名也只是一串文字,计算机和路由器并不能直接认出它,还需要通过DNS服务器找到域名对应的IP地址,再通过底层的TCP/IP协议路由到对应的机器上去 (这些内容不是本文的重点暂时略过,先挖个坑再说)

主机名就是某台计算机的名字,在一个局域网内,可以通过主机名找到你要访问的计算机。主机名和域名一样,计算机和路由器不认它,需要通过HOSTS文件这样的技术找到主机名和IP地址的关联关系,最后还是翻译成IP地址再继续发送网络请求

图中的localhost也是主机名,但是一种比较特殊的主机名,是给 回环地址的一个标准主机名,就是代表本机自己的地址。

在URL中也可以直接用IP地址来代替域名或主机名,如192.168.0.1,关于IP地址的相关知识点放到以后再讲(继续挖坑)

图中在冒号:后面的那串数字8080就是端口号,一台服务器上可以开多个端口号,往往一个网络服务程序就对应一个端口号

比如,我在机器 A 上,开了两个服务程序,分别是Tomcat和SSH,让它们分别关联端口8080和22,那URL中如果端口号是8080就是会访问到Tomcat程序,22就会连接SSH服务。

但可能有小伙伴会有疑问:诶,我平时上百度看到的URL是http://www.baidu.com没看到有端口号啊

其实是有的,端口号是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标准的格式冲突,比如要传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协议的其中几个重要部分,如果这一系列文章对你有帮助,别忘了关注哦~

最后,我还要推荐一款十分好用的 Java 端HTTP框架: Forest

官网:http://forest.dtflyx.com

Gitee仓库:https://gitee.com/dt_flys/forest

Github仓库:https://github.com/dromara/forest

这是一款声名式的HTTP框架,简单好用,因为它将拼接URL、请求头、请求体参数、等待响应,失败重试,转换响应数据到 Java 类型等脏活累活全包了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在爱水APP哪个模块中可以填写个人信息,查询自己一天的饮水量? 黄金为什么是避险产品 避险买什么 避险品种是什么 避险产品什么意思 什么是避险产品 ...对联和我们平时使用的印章,说说使用了哪几个字体 对联上写的是什么字 ...有一空是让我评价我自己,请各位哥哥姐姐帮帮忙,帮我编一段,往好了... 艾灸用品哪种好 by最新域名是什么 海尔冰箱219sk显示屏苹果标志怎么去除? 国家规定幼师取消乙肝检查是什么? 电饭煲数码屏幕和液晶屏幕有什么区别?我看到的数码的219,液晶的... 现在注册执业药师还要体检乙肝两对半吗?乙肝携带者可以注册执业药师吗... 我自己玩英雄联盟可以进去,但是跟朋友一起开黑就显示无法连接服务器,朋 ... lol开黑集体连不上什么情况??? 为什么我电脑自己玩lol可以,一开黑就连不上 ...开黑匹配成功之后就会一直在LOADING图 然后说连不上 cf开黑频道连不上如何修复 宿舍开黑总连不上什么情况 开黑啦登不上 为什么我用不了金手指 i7处理器的笔记本买什么样的好? 为什么我的YY说话信号只有4格,我都是放大10倍了,可声音很小,怎么办... 我家的yy这个信号很好很强,但是。网速很慢,很卡。是怎么回事? 目前有什么样的软件或接收器可以增强yy信号? bios中设置sata硬盘 银行卡交接单怎么写 用bitlock对硬盘加密 几个小时电脑的 硬盘都高速工作 对硬盘伤害大吗... Nginx 配置 https 后,http 强制跳转到 https,主域名跳转至带 www 的... https标准端口443下的域名和URL是加密的吗? 济南游乐园有哪些 白兰地是否就是葡萄酒 火狐浏览器HTML5播放器全屏是选择拒绝和记住选择,然后再也不能... ...5的video播放器为什么会没有全屏按钮,跟在浏览的样式不一样的?_百... netty 服务端主动向客户端发送消息后,怎么接收返回 新泰市区有什么中央空调?安装费劲吗? 摩托车上的十二伏电瓶多少钱 oracle 倒序查最后几条数据或去重后时间段获取 oracle中数据查询去重 作为公共自行车项目策划人 预算全城需多少辆自行车 需设立多少停车点... 求推荐一款扫描像素达到600dpi以上,图片色彩接近原稿颜色的A3扫描仪5000... 台州市共享电动单车和私家国标电动的牌照怎么一样的 要专业分流了,电力系统继电保护 和自动化相比,那个专业比较好_百度知 ... 那英为啥退出好声音 在数码上,有哪些时尚呢? 情侣之间送什么礼物 这些礼物最有创意 音箱电位器有毛病? 装修什么牌子的开关好