3

我正在使用 extjs4 构建一个驻留在 drupal 中的 webapp。
我的许多 ajax 调用都是针对 drupal 中模块中的菜单项。
我的 css 指向的图像有时位于我的 extjs 文件夹中,有时位于 drupal 中。

一位同事坚持认为使用 '../dir_a/' 的相对路径是糟糕的设计,并且容易产生风险。

这个对吗?还有其他方法吗?

我的文件夹结构:

- 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 中没有用。
任何人都可以帮助我支持我的说法,即它完全可以吗?

4

4 回答 4

1

这是一个非常糟糕的论点,类似于说:

如果你不清理你的数据库输入,你可能容易受到 SQL 注入攻击,因此,我不会使用数据库。

这几乎是相同的情况,只是清理输入的问题。

很可能您使用的任何服务器端堆栈都内置了功能(或库)来处理这些事情,类似于 C# 中的 Path 类:http: //msdn.microsoft.com/en-us/library/3bdzys9w (v=vs.71 )

于 2012-09-12T14:12:26.997 回答
1

一个。“如果服务器端代码将生成像 /a/b/c 这样没有尾随 / 的地址,您可能会遇到 /a/b/c../d 的情况” 是吗?这听起来更像是服务器端问题。

如果路径在您的文件中配置良好,我想不出任何问题。

湾。“你见过其他人使用它吗?” 在我看来,这是一种非常糟糕的决定任何事情的方式。

这是一个糟糕的方式,确实(1)。我尝试了第一个可用的网站(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

于 2012-09-12T14:14:34.077 回答
1

如果服务器端代码将生成像 /a/b/c 这样没有尾随 / 的地址,您可能会遇到 /a/b/c../d

这不是它的工作方式。如果你在/a/b/c并且引用../d,浏览器请求/a/b/d因为c不是目录,/a/b/是。现在,如果您只是连接字符串,我可能会发现存在问题(请注意,许多语言都具有组装路径的功能)。这不一定有风险,您最终只是要求错误的文件。

现在,我看到一些非常愚蠢的爬虫通过我的网站,同时尝试使用与base标签结合的相对 URL,并最终在我的日志中出现数千个 404 ......因为他们没有考虑到我所有的亲戚链接应该在我的基本标签的href前面。不使用基本标签,我没有遇到任何问题(我不提倡相对与绝对的任何一种方式)。

于 2012-09-12T14:15:40.113 回答
0

不使用相对路径的主要问题是每次移动引用其他文件(例如您的 css、html 和 js 文件)的文件都需要您更改此文件中的引用。

此外,如果您有一个 html 来源的 javascript 来源另一个来源 css 文件的 javascript,那么开发人员通常不清楚相对路径是什么(开发人员在该区域犯错误是很常见的 - 是否包含HTML 路径还是引用的调用者路径?)

此外,正如一条评论中提到的,这种做法导致在服务器端级别使用相同的模式,在某些情况下,这可能会导致轻微的安全风险。

使用相对 url的主要原因是它允许您将整个项目从一个目录移动到另一个目录,而无需更改任何内容。如果您使用的是根相对 url,则无法做到这一点。

总而言之,这个决定真的取决于个人和项目。我通常更喜欢根相对 url,但我也只有相对 url。

顺便说一句,最好的办法是拥有一个可以用作根的服务器端或编译时变量,这可以为您提供稳定性和灵活性,但这通常是很少有人拥有的奢侈品。

于 2012-09-12T14:04:36.500 回答