如何对“.”进行编码以在 URL 路径中使用
How to encode ".." for use in a URL path?
我正在尝试构建一个如下所示的URL:
var myUrl = '/path/to/api/' + encodeURIComponent(str);
但是,如果str
..
那么您的浏览器会自动删除路径段,以便URL变得/path/to
这不是我想要的。
我尝试将..
编码为%2E%2E
但您的浏览器仍然在发送请求之前重新解释它。我能做些什么来让路径实际通过我的服务器作为/path/to/api/..
?
这不受支持,因为该行为会违反 RFC 3986。
来自第 2.3 节。 未保留的字符(强调我的):
URI 中允许但没有保留的字符目的被称为无保留。 这些包括大写和小写字母、十进制数字、连字符、句点、下划线和波浪号。
在unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
将非保留字符替换为其对应的百分比编码 US-ASCII 八位字节是等效的:它们标识相同的资源。 但是,URI 比较实现在比较之前,不要总是执行规范化(参见部分6). 为了保持一致性,在 ALPHA 范围内使用百分比编码的八位字节(%41-%5A 和 %61-%7A)、数字 (%30-%39)、连字符 (%2D)、句点 (%2E)、下划线 (%5F) 或波浪号 (%7E) 不应由 URI 创建生产者,当在 URI 中找到时,应解码为其URI 规范化程序的相应非保留字符。
来自第 6.2.2.3 节。 路径段规范化(强调我的):
完整的路径段 "." 和 ".."仅供使用在相对引用中(第 4.1 节),并作为引用解析过程(第 5.2 节)。 但是,一些部署的实现错误地假定引用分辨率当引用已经是 URI 时,不需要,因此无法删除出现在非相对路径中的点段。 乌里规范化器应通过应用remove_dot_segments路径的算法,如中所述第 5.2.4.节):
我实际上已经通过对文本进行双重编码,然后在服务器后端对其进行取消编码来做类似的工作。但是,我的是查询参数,而不是路径的一部分。
附言。这是我写在我的手机上的,我稍后会添加一个示例。
由于没有解决方案,除了错误之外,我们无能为力:
export function encodeUriComponent(str) {
if(str === '.' || str === '..') {
throw new Error(`Cannot URI-encode "${str}" per RFC 3986 §6.2.2.3`)
}
return encodeURIComponent(str);
}
我觉得这是一个比任意修改 URL 路径更好的选择,这正是我试图通过使用 encodeURIComponent
来避免的。
- Ajax URL路径未替换当前URL
- javascript window.location在检查firebug时给了我一个错误的url路径
- 在angularjs中动态路由url路径
- 来自URL的Regex URL路径
- 在相对于用户当前 URL 路径的不同路径中设置 Cookie
- 是否存在用于解析 URL 路径段(矩阵)参数的 JavaScript 库
- 我可以使用URL路径提交参数吗
- 将URL路径与<a>attr('href')来动态更新.active类
- 重定向Javascript中包含的URL路径
- 增加/减少 URL 路径名单击
- AngularJS hashbang模式复制URL路径
- 无法使用angular中的$location服务更改URL路径
- 如何从php或node.js获取websocket url路径
- 如何对“.”进行编码以在 URL 路径中使用
- 匹配不带查询字符串的 URL 路径
- 如何根据 URL 路径添加 CSS 类
- history.pushstate如何允许嵌套URL路径的单一入口点
- jQuery做一些取决于url路径的事情
- 使用正则表达式提取 url 路径
- Angular js显示基于所选项目和url路径的名称