URI: Uniform Resource Identifer 统一资源标识符特指在计算机用语中, 一个用于标识某一互联网资源名称的字符串
它的格式一般如下:
协议(访问资源的命名机制)
主机IP地址(存放资源的主机名)
资源存放的具体地址,包括目录和文件(资源自身的名称,由路径表)
URI解析:“解析”一个URI意味着将一个相对URI引用转换为绝对形式,或者通过尝试获取一个可解引URI或一个URI引用所代表的资源来解引用这个URI。文档处理软件的“解析”部分通常同时提供这两种功能,通俗一句话,即是把整个uri进行拆解,具体用途,上升至具体情况具体分析
举个栗子:
var uriStr = 'https://so.youkuaiyun.com/so/search/s.do?q=py&t=%20&u='
window.location = uriStr
console.log(window.location.href) // 这个是完整的uri
console.log(window.location.protocol) // 通信协议 https
window.location.host // 主机名(域名或IP地址))
window.location.port // 端口号)
window.location.pathname // 路径(资源目录)
window.location.search // 参数(?及其后参数)
window.location.hash (信息片断(锚点))
既然提到了uri,那就提一嘴URI编码及解码的相关内容
在js中推荐的做法是用encodeURI对URI的网址部分编码,用encodeURIComponent对URI中传递的参数进行编码,理由如下:
它可以对所有的Unicode符号编码,包括中文,空格,井号(#),斜线(/),冒号(:)
除了地址,参数亦可以进行编码
escape的话,并不完备,支持度并不好
解码对应的方法为decodeURI及decodeURIComponent
encodeURIComponent与decodeURIComponent对应的字符编码为utf-8,基于这个原则,utf-8与base64之前的转换方法
在加上window.btoa与window.atob这两个方法不支持unicode字符集,综上所述,在使用unicode字符集与base64转换之前,需要透过encodeURIComponent与decodeURIComponen将其转换成utf-8之后,再执行 unicode字符集与base64转换操作