一般我们每天上网的时候,都会在浏览器的地址栏输入某个网站的“网站地址”,然后点击回车就可以跳转到我们想要访问的网站,如下图。这
但实际上,称其为“网站”并不是特别准确。更准确的来说,应该称为URL。
到底啥是URL
那么URL到底是什么?不就是一个网站地址吗?
URL是英文Uniform Resource Locator的缩写,是一种标识信息在互联网上位置的表达方法。
URL的组成
当我们平时使用浏览器时,我们可以简单地输入baidu.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.等字符串称为二级域名,但域名只是一串文本,计算机和路由器无法直接识别它。 t。通过你的DNS服务器找到域名对应的IP地址,并通过底层TCP/IP协议路由到对应的机器(这些不是本文的重点,所以我们重点关注(跳过)。先打孔)
主机名
主机名是特定计算机的名称,在局域网中,您可以使用主机名来查找要访问的计算机。主机名与域名相同。计算机和路由器必须使用HOSTS 文件等技术发现主机名和IP 地址之间的关系。请先更改您的地址,然后再继续发送网络请求。
在图中,localhost也是一个主机名,但它是一个更具体的主机名:它是环回地址的标准主机名,代表本地机器本身的地址。
您也可以直接使用
IP地址
IP地址替换URL中的域名或主机名(例如192.168.0.1)。我们稍后会讨论IP地址的相关知识点(更详细)。
端口号
图中冒号: 后面的数字8080 列允许您在服务器上打开多个端口号。
例如,我在机器A 上打开了两个服务程序:Tomcat 和SSH,并分别与端口8080 和22 关联。如果URL中的端口号为8080,则访问Tomcat程序并在22上连接SSH。 服务。
不过,有些朋友可能会有疑问。 “哎,我在百度上总是看到的网址是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=101ty=2就是查询参数
查询参数,也称为URL参数和查询字符串,英文或Query,用于以字符串的形式向服务器传输参数和少量数据。
参数的格式通常表示为多个键值对。例如a=1和b=2是两个键值对,其值为:对应“1”和“2”,多个键值对应连接:a=1b=2
URL编码
但是,作为参数传递的某些值通常包含特殊字符,会与连接器冲突,例如如果传递ab 这样的字符串。不区分查询参数中的键值对会产生歧义。
最简单的方法就是对参数值进行编码,称为URL编码。编码使ab 成为a%26b 并且不包含任何冲突的特殊字符。
即使某些参数包含特殊字符,它们也不会被编码,除非您强制对它们进行编码。例如,如果URL 参数值是另一个URL 字符串,则可以编写http://localhost/do?url=http://www。百度网
但是,如果subURL 包含子参数和多个子键,则在这种特殊情况下不会有歧义,因为计算机系统将参数识别为URL 中的另一个字符串并以URL 的形式解析它们。对于-value 对,不清楚参数是属于儿子还是父亲。在这种情况下,最好强制编码。
列表参数
URL 参数是键值对。换句话说,如果一个键需要传递多个值(即一个列表)怎么办?易于操作
例如,您可以在URL 中重复参数名称,例如a=1a=2a=3。您还可以使用此功能将1, 2, 1 添加到参数名称中。指定3 作为参数a 的列表值。
为了清楚起见,通常在列表参数名称后面添加一对方括号[](例如,a[]=1a[]=2a[]=3)。
但对于URL参数描述或者格式标准并没有特别严格的规定,一般都支持上面列出的格式。
锚
图中#后面的字符串#abc为锚点部分
锚点,英文称为References,通常用于传递参数等信息,但与查询参数的本质区别在于,这部分内容不会传递到服务器。
锚点通常用在页面上。例如,当您浏览网页时,您可以按下按钮来查找页面顶部或页面上的特定位置。
如今,随着前后端分离技术的兴起,尤其是Vue、Reactjs等前端框架的兴起,锚点作为前端JavaScript程序处理的参数载体变得越来越重要。
结语
URL看起来非常简单,我们已经习惯了,但它们背后往往隐藏着许多技术细节和知识点,所有这些我们都将在这篇简短的文章中涵盖。
事实上,URL包含很多内容。例如,由于篇幅限制,在URL中发送用户名@密码等用户验证信息不予讨论。
因此,我们将在几篇文章中解释HTTP协议的重要部分。如果您觉得本系列文章对您有帮助,请关注我们。
版权声明:本文由今日头条转载,如有侵犯您的版权,请联系本站编辑删除。