基本概念
平时我们俗称的 "网址" 其实就是说的 URL (Uniform Resource Locator 统一资源定位符). 互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它. URL 的详细规则由 因特网标准RFC1738 进行了约定. (https://datatracker.ietf.org/doc/html/rfc1738)
URL基本格式
1.协议方案名
.常见的有 http 和 https, 也有其他的类型. (例如访问 mysql 时用的 jdbc:mysql )
2.登陆信息
现在的网站进行身份认证一般不再通过 URL 进行了. 一般都会省略
3.服务器地址
此处是一个 "域名", 域名会通过 DNS 系统解析成一个具体的 IP 地址,描述了服务器在网络中的位置
关于 DNS 系统(域名解析系统)推荐看DNS(域名解析系统)
4.服务器端口号
端口号用于区分服务器上的应用程序
5.带层次的文件路径
具体访问到的服务器资源
6.查询字符串
在URL中?后的就是查询字符串(query string),作用是向服务器描述请求资源的属性(比如买面条时和老板说多放香菜少放葱一样)本质是一个键值对结构. 键值对之间使用 & 分隔. 键和值之间使用 = 分隔
7.片段标识符
不太常见,主要是在文档类的网站中能够看到,主要用于页面内跳转,通过不同的片段标识跳转到文档的不同章节
实际上对应URL来说,上述的几个部分都是可以省略的(不是哪个部分必须得有)
1.协议名省略
省略后默认为 http://
2.IP地址/域名省略
此时访问的就是当前服务器的地址
3.端口号省略(相当常见的)
端口号省略后,浏览器会自动加上端口(这个端口表示访问服务器的哪个应用程序),如果是HTTP协议,自动添加的端口就是80,如果是HTTPS协议,自动添加的端口就是443(1-1024是知名端口号)
因此一些商业产品部署服务器的时候,往往会遵守以上的规则,把HTTP绑定到80号端口,HTTPS绑定到443号端口
4.带层次的文件路径省略
带层次的文件路径省略后,访问到的资源就是根文件的内容,一般就是主页的HTML文件
5.其他的很明显能省略
关于 URL encode
像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现. 比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义. 一个中文字符由 UTF-8 或者 GBK 这样的编码方式构成, 虽然在 URL 中没有特殊含义, 但是仍然需 要进行转义. 否则浏览器可能把 UTF-8/GBK 编码中的某个字节当做 URL 中的特殊符号. 转义的规则如下: 将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一 位,前面加上%,编码成%XY格式