这篇内容不多,但是和接下来的两三篇可共同组成浏览器导航的知识体系。
这篇主要写 URI 和 URL
术语中,统一资源标识符(Uniform Resource Identifier,URI)是一个用于标识某一互联网资源名称的字符串。该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。
URI的格式由协议名,冒号,和协议对应的内容构成。具体的格式如下:
[协议名]://[用户名]:[密码]@[服务器地址]:[服务器端口号]/[路径]?[查询字符串]#[片段ID]
例如:
ldap://[root@49.233.192.228]/etc=GB?test?one#454
URL是Uniform Resource Locator的缩写,译为"统一资源定位符"。
URL是一种URI,它标识一个互联网资源,并指定对其进行操作或获取该资源的方法。可能通过对主要访问手段的描述,也可能通过网络“位置”进行标识。
比如:
http://www.909500.club/book/test.pdf
表示通过http协议从主机名www.909500.club的主机上获取test.pdf文件。
统一资源定位符 是 统一资源识别符的子集。
URL 是 URI的表现形式。
encodeURI()
函数通过将特定字符的每个实例替换为一个、两个、三或四转义序列来对统一资源标识符 (URI) 进行编码 (该字符的 UTF-8 编码仅为四转义序列)由两个 "代理" 字符组成)。
encodeURI
会替换所有的字符,但不包括以下字符,即使它们具有适当的UTF-8转义序列:
类型 | 包含 |
---|---|
保留字符 | ; , / ? : @ & = + $ |
非转义的字符 | 字母 数字 - _ . ! ~ * ' ( ) |
数字符号 | # |
请注意,encodeURI 自身无法产生能适用于HTTP GET 或 POST 请求的URI。
因为 "&", "+", 和 "=" 不会被编码,然而在 GET 和 POST 请求中它们是特殊字符。
encodeURIComponent
除以下字符外全部转义。
A-Z a-z 0-9 - _ . ! ~ * ' ( )
为了避免服务器收到不可预知的请求,对任何用户输入的作为URI部分的内容你都需要用encodeURIComponent进行转义。
对于 application/x-www-form-urlencoded
(POST) 这种数据方式,空格需要被替换成 '+',所以通常使用 encodeURIComponent 的时候还会把 "%20" 替换为 "+"。
下面这种方式是比较安全的:
function fixedEncodeURIComponent (str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
return '%' + c.charCodeAt(0).toString(16);
});
}
本文分享自 JavaScript高级程序设计 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!