URL 是什么?
Posted xhyccc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了URL 是什么?相关的知识,希望对你有一定的参考价值。
URL 是什么?
本文写于 2020 年 5 月 16 日
URL 是什么?天天听到人家说到这个名词,那它到底是什么?
URL 是统一资源定位符,Uniform Resource Locator。
俗称——网址。
看看维基百科对它的解释:
它是因特网上标准的资源的地址,好像门牌一样。它最初是由蒂姆·伯纳斯-李发明用来作为万维网的地址,现在它已经被万维网联盟编制为因特网标准 RFC 1738。
在互联网的历史上,统一资源定位符的发明是一个非常基础的步骤。统一资源定位符的语法是一般的,可扩展的,它使用美国信息交换标准代码的一部分来表示因特网的地址。统一资源定位符的开始,一般会标志着一个计算机网络所使用的网络协议。
那到底,URL 的规则是什么呢?
它有哪些组成部分呢?
让我们一一道来。
01 IP 地址
IP,Internet Protocol,网际协议。它是用来分组交换网络数据的一种协议,也是 TCP/IP 协议族中的主要协议。
IP 地址,IP Address,网际协议地址。
顾名思义——只要我们在互联网中,我们至少会拥有一个独立的 IP,它代表我们的位置。
也就是说 IP 地址负责标识主机与网络寻址。
那这里就要提到内网和外网的概念了。
假设我们买了宽带,需要装网,这个时候我们就需要如下步骤:
- 买宽带服务;
- 买一个猫;
- 买一个路由器;
- 设备连上路由器;
- 路由器连上电信服务器,路由器就会拥有外网 IP;
- 如果重启了路由器,就可能会被重新分配一个 IP,路由器没有固定的外网 IP;
- 手机、电脑等多个终端的 IP,则是内网 IP,一般是
192.169.xxx.xxx
。
而在这之后,路由器,就身处外网与内网;你的各种终端设备,都处于内网。
- 那么路由器有两个 IP,一个外网,一个内网;
- 内网中的设备可以互相访问,但是不能直接访问外网,必须通过路由器;
- 外网的设备可以互相访问,但是不可以直接访问内网,必须通过路由器——所以路由器也被叫做 “网关”。
几个特殊的 IP
- 127.0.0.1 代表自己
- localhost 通过 hosts 指定为自己
- 0.0.0.0 不表示任何设备
我们知道了这些,就可以通过 127.0.0.1
来从浏览器访问自己。
我们可以使用 mac 自带的 apache
,来启动服务器:sudo apachectl start
。(关闭命令为xxxx stop
)
然后可以在浏览器窗口输入:127.0.0.1
,访问到“It Works”。
这个地址输入localhost
也是可以访问的。
接着切换到 private
文件夹下的 etc
文件夹,然后使用sudo vim hosts
,用管理员权限编辑 hosts
文件。
我们发现里面写着:127.0.0.1 localhost
这是什么意思?
可以尝试添加127.0.0.1 aloha
,接着保存后,在浏览器输入:aloha
,惊奇的发现我们依然访问了同样的网页!
hosts 文件可以让我们自定义127.0.0.1
的别名。
02 TCP/UDP 端口(Port)
一台机器可以提供多种不同服务,这就是端口的作用。
- 要提供 HTTP 服务最好使用 80 端口;
- 我们自己使用时,最好使用 8080 端口;
- 要提供 HTTPS 服务,最好使用 443 端口;
- 要提供 FTP 服务,最好使用 21 端口;
- 一共有 65535 个端口。
维基百科为我们列出了常用端口及其用途。
规则:
- 0-1023 号端口是留给系统使用的,除非拥有服务器权限;
- 如果端口被占用,只能换一个端口。
那么和 IP 结合起来看,就能明白:IP 是用来提供位置的,端口则是不同的服务入口。
二者缺一不可!
03 域名
域名就是 IP 的别称。
打开命令行,输入ping baidu.com
,就会返回给我们相应的 IP 与端口。
但是我们发现,不同的人 ping 同一个网站,返回的 IP 居然不一样!
这个就叫做负载均衡。
一般是将各地访问者,指向离他更新的服务器。一方面提高访问速递,一方面减轻服务器压力。
所以:一个 IP 可以对应不同域名;一个域名也可以对应多个 IP。
04 DNS
Domain Name System 是 DNS 的全称,域名系统。
维基的解释是:
它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
很难理解,但也很好理解,就是说 DNS 告诉我们域名和 IP 的匹配关系。
比如我们刚刚 ping
域名的时候,为什么能返回 IP 呢?
假设我们在浏览器输入了百度的域名,想要访问百度,那么过程如下:
- 浏览器向网络提供商提供的 DNS 服务器询问:baidu.com 是对应什么 IP?
- 供应商回答一个 IP(很复杂);
- 浏览器向对应的 80/443 端口发送请求(之前说了,80 是 HTTP,443 是 HTTPS);
- 请求内容是查看 baidu.com 的首页。
05(插曲) www.baidu.com 和 baidu.com 是一个域名吗?
不是。
com(company)是顶级域名,baidu.com 是一个二级域名(俗称一级域名)——而 www.baidu.com 是三级域名(俗称二级)。
所以,www.baidu.com 是 baidu.com 的子域名。
所以,他们有可能不是同一个网站。
06 路径
不同的路径,访问不同的页面。
这是什么意思呢?
比如说假设www.baidu.com/搜索
可以访问搜索页面;www.baidu.com/图片
可以访问百度图片。
07 查询参数
同一个页面,不同的内容。
www.baidu.com/用户?id=12138
和www.baidu.com/用户?id=9527
就是让“用户”界面,接收不同的参数。
如果有多个参数可以用 & 连接。
这个叫做查询参数。
08 锚点
那如何在同一个页面上,查看不同的位置呢?
比如微信公众号,我们发现他会记住上次的阅读位置。
这可以通过锚点实现。
比如:www.baidu.com/搜索?text=Bilibili#one
但是锚点不支持中文,有些看起来是中文,但是复制粘贴之后会变成一长串字母符号和数字。实际上,和中文是一个意思,只是编码后的结果。
并且锚点,不在请求之内。服务器不会接收#后的字符串。
提一下 curl 命令
curl 可以用来发起 http 请求,比如:curl https://baidu.com
,使用curl -v https://baidu.com
,就可以看到如何完成的请求过程。
使用curl
请求网页的时候,会发生以下事情:
- url 会被 curl 重写,先请求 DNS 来获得 IP;
- 然后进行 TCP 连接,成功后发送 HTTP 请求;
- 响应结束后,关闭 TCP 连接,结束。
请求内容为:
> GET / HTTP/1.1
> Host: baidu.com
> User-Agent: curl/7.64.1
> Accept: */*
响应内容为:
< HTTP/1.1 200 OK
< Date: Sat, 16 May 2020 15:04:07 GMT
< Server: Apache
< Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
< ETag: "51-47cf7e6ee8400"
< Accept-Ranges: bytes
< Content-Length: 81
< Cache-Control: max-age=86400
< Expires: Sun, 17 May 2020 15:04:07 GMT
< Connection: Keep-Alive
< Content-Type: text/html
那 HTTP 到底是做什么的呢?
HTTP 是协议,协议就是规定某些事情如何去做的标准。
目前看来,HTTP 可以规定上面的“请求内容”、“响应内容”。
总结
最后,总结一下,URL 到底由哪些东西组成?
一个完整的 URL(uniform resource locator 统一资源定位符),如下所示:
https://www.baidu.com/s?wd=hello&rsv_spt=1#5
分解如下:
https://
协议www.baidu.com
域名/s
路径?wd=hello&rsv_spt=1
查询参数#5
锚点- 端口,默认 443 或者 80,但是不会显示
(完)
以上是关于URL 是什么?的主要内容,如果未能解决你的问题,请参考以下文章
结合两个代码片段?将用户输入的 Youtube url 转换为嵌入 url,然后将 iframe src 替换为转换后的 url
URL中的锚点(fragment片段标识符)是什么?(hash mark(#))(HTML 页面内定位)(之前学html不是学了吗?忘啦?)(SEO 搜索引擎优化)
项目启动报错Failed to configure a DataSource: 'url' attribute is not specified and no embedde(代码片段