URL
URL是Uniform Resource Locator的缩写,中文称为统一资源定位符,它是一种用于在互联网上标识和定位资源的字符串。这个字符串可以被任何网络设备(如计算机、手机等)识别,并指向特定的资源,如网页、图片、视频等。URL的发明是互联网历史上的一个重要里程碑,它使得用户可以方便地访问互联网上的各种资源。
URL其实就是网址
URL的组成
URL的结构通常由以下几部分组成:
-
协议(Protocol):这是URL的第一部分,表示发送请求和接收响应的网络通信协议。常见的协议有HTTP(超文本传输协议)、HTTPS(安全超文本传输协议)、FTP(文件传输协议)等。协议部分告诉浏览器或其他网络设备应该使用哪种方式来获取资源。
-
主机名(Host):这是URL的第二部分,表示服务器的名称或IP地址。用户在浏览器中输入的网址(如www.example.com)就是主机名。主机名告诉网络设备应该将请求发送到哪个服务器。
-
端口号(Port):这是URL的可选部分,表示服务器监听的端口号。在默认情况下,HTTP协议的端口号是80,HTTPS协议的端口号是443。如果URL中省略了端口号,那么将使用默认端口号。
-
路径(Path):这是URL的第四部分,表示服务器上资源的位置。路径部分通常以斜杠(/)开头,后面跟着资源的目录和文件名。路径告诉网络设备应该在服务器上哪个位置查找资源。
-
查询参数(Query):这是URL的可选部分,表示在路径后面的附加信息。查询参数通常是以问号(?)开始的键值对,用于向服务器传递额外的信息
URL的示例
一个典型的URL示例是:“http://www.example.com/index.html?name=John&age=30”
在这个URL中:
- 协议是“http”
- 主机名/域名 是“http://www.example.com”
- 路径是“/index.html”
- 查询参数是“name=John&age=30”
- 端口号被省略了,因此使用HTTP协议的默认端口号80
(省略的端口号会和域名进行强关联,由于域名会在浏览器中自动的转化成IP地址,所以当输入这一串网址时,浏览器会发送请求,自动的会在网址上进行拼接,将端口号80拼接上去)
关于域名:
- 在URLhttp://www.example.com/index.html?name=John&age=30中, 域名是 "http://www.example.com"。
- 域名是URL中用于标识网站或服务器名称的部分,它位于协议(http://)之后,路径(/index.html)之前。
- 在这个例子中,域名由 "www" 子域和 "example.com" 顶级域(TLD)组成。
- 不过,从技术角度来看,"www" 实际上是 "example.com" 的一个子域,但通常人们会将整个 "http://www.example.com" 视为域名。
urlencode和urldecode
URL编码(URLencode)
URL编码是一种将不安全的ASCII字符转换为“%”后跟两位十六进制数的形式的过程。这些不安全的字符通常包括空格、特殊字符(如&
、=
、?
等),以及非ASCII字符。URL编码的目的是确保URL中的所有字符都是有效的,并且可以被服务器正确地解析。
转义的规则如下: 将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY 格式
例如,空格在URL中是不安全的,因为它可能被解释为分隔符。因此,空格在URL编码中被替换为%20
。类似地,&
(和符号)被编码为%26
,=
(等号)被编码为%3D
,等等。
又例如:下图中的网址,网址内部的++符号编程了%2B%2B
URL解码(URLdecode)
URL解码是URL编码的逆过程,它将URL中经过编码的特殊字符转换回它们原来的形式。这通常发生在服务器端,当服务器接收到URL并需要解析其中的参数时。
应用场景:
- URL编码通常用于构建查询字符串(query string),即将参数附加到URL的末尾。当参数中包含特殊字符时,这些字符需要被编码以确保它们被正确传输和解析。
- URL解码则发生在服务器端,当服务器接收到包含编码字符的URL时,它会对这些字符进行解码,以便能够正确地读取和解析它们。