认识 URL
计算机中非常重要的概念,并不仅仅是在 HTTP
中使用。用来描述一个网络资源所处的位置,全称“唯一资源定位符”
URI
是“唯一资源标识符“- 严格的说 URI 的范围比 URL 更广一些
标识一个变量的身份,可以使用变量的地址(C 语言),也可以使用变量的
hashcode
(Java
)标识身份就相当于是
URI
这样的东西;我们使用地址,就相当于是URL
(地址也可以起到标识身份的效果)
URL 基本格式
https://www.sogou.com/
就是一个最简单的 URL
https://
,协议的名称www.sogou.com
,域名
- 登录信息写在这里不太安全,现在都是通过“单独的登录界面”进行身份验证
- 这里的域名,也可以是 IP 地址(域名和 IP 地址可以互相转换的)
- 这里的端口号,代表你要访问服务器的那个端口。当前服务器上会有很多程序,这些程序我们需要进行区分
- 如果
URL
中不带端口号,浏览器就会默认给一个端口(服务器的端口,不是客户端的,也就不是系统随机分配的那个)。此处用什么端口作为默认值取决于协议:http==>80
;https==>443
带层次的文件路径
- URL 代表的是网络上的资源位置,你就要知道
- 通过 IP 地址知道服务器在哪
- 通过端口号知道程序是哪个
- 通过路径知道是访问哪个资源
这里可能会对应一个真实的硬盘文件,也可能会对应一个虚拟的文件
查询字符串
- 是针对请求的内容做的补充说明
- 是客户端给服务器传递信息的重要途径
- 这里的组织方式是按照键值对的方式来组织的
- 这里的键值对的内容,就是程序员自定义的,没有标准规定
- 所以一般查询字符串具体是什么意思,作为外人无法得知,必须是写这个代码的程序猿才知道
片段标识符
- 用来标识当前页面的某个部分。通过不同的片段标识可以完成页面的跳转(目录定位跳转)
结合上述 IP 地址、端口号、路径、查询字符串,就可以描述出一个网络资源了
- IP 地址==>确定服务器是哪个
- 端口号==>确定程序是哪个
- 路径==>确定访问的资源是哪个
- 查询字符串==>补充说明
URL encode
query string
里面是自定义的键值对。在 URL
中,本身有一些特殊符号具有特定的含义(/
、:
、?
、@
…)
如果 URL
的 query string
中也包含同样的符号怎么办?
- 如果直接写进去,就可能会导致服务器/浏览器解析失败
靠谱的方法就是对上述符号进行"转义",转义的过程就叫“URL encode
”
不仅针对标点符号,还要对汉字进行转义。因为汉字的 UTF8/GBK
等编码值其中可能某个字节就恰好和某个符号的 ASCII
码一致,此时就麻烦了
当你在浏览器中搜索
C++
的时候,+
就会被转义成%2B
- 把
+
的 ASCII 拿出来,使用十六进制表示,并且加上%
当你在浏览器中搜索“蛋糕”的时候,“蛋糕”就会被转义成
%E8%9B%8B%E7%B3%95
- 但是在浏览器中看到的还是“蛋糕”,只有复制出去了才能看到。因为浏览器自动帮你转换了
- 将“蛋“和“糕“的 UTF8 编码进行十六进制表示,并且在前面加上
%
这里的 URL encode
是非常重要的。在实际开发中,当要构造一个 URL
,尤其是 URL
的 query string
中要包含中文的时候,务必要进行编码!!!