1、介绍
uri,uniform resource identifier统一资源标识符。用于标识资源视其与其他区分,包括url和isbn等方案。
url,uniform resource location统一资源定位符。属于uri的一个子集,用网络可访问的形式进行定位标识资源。
url的作用:
- 作为超链接a的href属性,访问文件
- 作为图片img的src属性,获取图片资源加载到本地
- 作为form的action属性,提交数据到服务端
- 作为超链接a的download属性,进行下载
2、组成
schema://username:password@host:port/path?query#fragment
(1)schema
协议,一般是指http或者https,但从url定义也可以用于ftp、file、ssh等
(2)username和password
用户名和密码,用于需要特殊验证身份的场景,一般没有遇到过,但是浏览器和服务器支持传递,作为无效信息
也可以没有password,只有username部分
这一块有时用于重定向漏洞欺骗和绕过
(3)host
主机,可以是域名,也可以是ip地址,还可以是localhost这样的名称。
(4)port
端口,如果是与协议匹配的默认端口,可以省略不写,http与80,https与443
(5)path
路径,几种情况:
- 无,服务器会导向默认配置的页面,比如index.html
- 文件结尾,可能是静态文件,也可能是动态文件
- 路径结尾,指向服务器的处理接口
(6)query
一般参数,以&拼接键值对,以=拼接键和值
(7)fragment
哈希,用于url请求之后的页面定位,或者用于传递数据给请求之后的响应页面。
3、url编码
(1)编码方案
url中存在某些敏感字符作为其结构描述符,如果要表达敏感字符作为普通文本,需要进行转码,即url编码。
url编码是将字符转为utf-8,然后对每个字节前加%字符。
一般,会对url结构描述符、ascii无法直接表达的字符、以及超出ascii编码的字符进行转码,而其他是否转码均可。
(2)编码解码场景
编码过程发生在浏览器端,由浏览器主动进行,或者人为的处理。而服务端,即服务器容器会自动解码,开发者不需要考虑url解码。
编码需求存在于query部分,也存在于path部分。
form表单一般提交时,体部的数据也会进行url编码
4、http与url
请求行中会包含http指定url的path及query部分。
如果类似,http://www.baidu.com,则路径为空。
http请求中,不包含hash部分。
而主机名和端口由Host头部字段指定。
http协议不区分http/https,或者说只表示http。