可以用'吗/'在相对路径中
Is it Ok to use '../' in relative paths?
我正在使用extjs4构建一个驻留在drupal中的web应用程序
我的许多ajax调用都是针对drupal中某个模块中的菜单项的
css指向的图像有时位于extjs文件夹中,有时位于drupal中。
一位同事坚持认为使用…的相对路径/dira/是一种糟糕的设计,并且容易产生风险。
这是正确的吗?还有别的办法吗?
我的文件夹结构:
- drupal
- v2 (extjs home folder)
- css
- extjs
- sites
- mySite
- modules
- webApp
我的css文件包含如下调用:
.x-action-col-cell img.restart-test-icon {
background-image: url(../extjs/examples/sandbox/images/gears.png);
}
我的应用程序有这样的调用:
Ext.Ajax.request({
url: '../webapp/tests/create/',
method: 'Post'
});
编辑:评论员要求澄清。同事的两个主要问题是:
1."如果服务器端代码将生成一个类似/a/b/c
的地址,而没有后面的/
,则可能会出现/a/b/c../d
"
是吗?这听起来更像是服务器端的问题
2."你见过其他人使用它吗?"
在我看来,这是一种非常糟糕的决定方式
但我继续使用firebug测试了一些JS密集型网站(gmail、aws),发现它们的JS或CSS中没有使用../
有人能帮我证明我的说法吗?
a。"如果服务器端代码将生成一个类似/a/b/c的地址,而没有尾随/,那么您可能会遇到这样的情况:/a/b/c/d"是吗?这听起来更像是服务器端的问题。
如果你的文件中配置好了路径,我想不出有什么问题。
b。"你见过其他人使用它吗?"在我看来,这是一种非常糟糕的决定方式。
这确实是一种糟糕的方式。我尝试了第一个可用的网站(stackoverflow.com),请参阅此页面中包含的all.css:
.review-diff-bar .review-diff-bar-helper {
background: url("../Img/diff-icons/full-html-diff.png") no-repeat scroll 0 0 transparent;
...
}
.openid-identifier {
background: url("../img/openid-large.png") no-repeat scroll left center transparent;
...
}
这是一个css,但同样适用于js文件。
(1) 关于这类谬论的信息:http://www.fallacyfiles.org/ignorant.html
这是一个相当糟糕的论点,类似于说:
如果你不净化数据库输入,你可能会受到SQL注入攻击,因此,我不会使用数据库。
这是几乎相同的情况,一个净化输入的问题。
你使用的任何服务器端堆栈都很可能内置了处理这些事情的功能(或库),类似于C#中的Path类:http://msdn.microsoft.com/en-us/library/3bdzys9w(v=vs.71)
如果服务器端代码将生成一个类似/a/b/c的地址,而没有a尾随/你可能会遇到/a/b/c的情况/d
这不是它的工作方式。如果你在/a/b/c
并引用../d
,浏览器会请求/a/b/d
,因为c
不是目录,而/a/b/
是。现在,如果你只是连接字符串,我可能会看到问题(注意,很多语言都有组装路径的功能)。这不一定是的风险,您最终只是要求提供错误的文件。
现在,我看到一些非常愚蠢的爬虫通过我的网站,试图使用与base
标签相结合的相对URL,结果在我的日志中出现了数千个404。。。因为他们没有考虑到这样一个事实,即我的所有相对链接都是用我的基本标记的href来准备的。在不使用基本标签的情况下,我没有遇到任何问题(我不主张相对还是绝对)。
不使用相对路径的主要问题是,引用其他文件(例如css、html和js文件)的文件的每次移动都需要更改该文件中的引用。
此外,如果你有一个html源代码的javascript,而另一个javascript源代码的css文件,那么开发人员通常不清楚相对路径是什么(开发人员在这个区域犯错误是很常见的,是包含html路径还是引用的调用方路径?)
此外,正如一条评论中所提到的,这种做法导致在服务器端级别使用相同的模式,在某些情况下,这可能会导致轻微的安全风险。
使用相对url的主要原因是,它允许您将整个项目从一个目录移动到另一个目录,而无需更改任何内容。如果您使用的是相对根URL,则无法做到这一点。
总而言之,这个决定实际上取决于个人和项目。我通常更喜欢根相对URL,但我也有过相对URL。
顺便说一句,最好的办法是有一个服务器端或编译时间变量,你可以把它用作根,这给你带来了稳定性和灵活性,但通常这是很少有人拥有的奢侈。
- 可以用'吗/'在相对路径中
- Angular sqlLite set css url()无法设置相对路径
- jquery移动应用程序无法使用jquryMobile框架JS和css文件的相对路径
- node.js需要相对路径
- 相对路径的计算
- 如何访问节点模块中具有相对路径的文件
- 在JQuery中,'加载'方法'的相对路径在引用项目中的html文件时开始
- Javascript中具有fetch的相对路径
- backbone.js在#断开相对路径之前缺少斜杠
- 相对路径中的角度2 img src
- 带有JS点击相对路径的网页URL链接
- 流星 ES6 模块相对路径
- 在不同浏览器中使用 javascript 的相对路径
- 无法加载具有相对路径的 css/js
- SystemJS 相对路径
- 是否可以要求项目目录外部的模块没有相对路径
- 无法使用 Jade 模板包含相对路径文件
- RequireJS 不遵循设置了 baseUrl 的数据主的相对路径
- 如何使用它的相对路径访问tomcat服务器中的文件夹
- jQuery ajax 相对路径未找到文件