JavaScript / jQuery回调到服务器,没有支持可执行后端

时间:2009-09-29 18:32:04

标签: javascript jquery webserver

一位技术人员今天问我,jQuery(或一般的JavaScript)是否可以ping回其原始来源,并在不使用可执行代码的情况下获取有关文件系统的信息。我的膝盖反射回答是,如果不使用AJAX,ASP.NET或其他一些可执行技术,IIS就不会允许这种情况发生。换句话说,从静态HTML页面运行的JavaScript无法撤回有关它来自的Web服务器的信息。

同样,这是膝盖反射的答案,仅仅由于安全问题,这是不可能的......但我并不认为自己是一个全知的JavaScript / jQuery专家,所以我把这个问题告诉了你们所有人。如果您知道某种方法可以做到,或者您确定无法做到这一点,我会非常感谢您的反馈。

谢谢。

-Jessy Houle


到目前为止,解决方案都需要服务器端技术,ASP,ASP.NET,PHP,Web服务等。为了更好地说明问题,我将为您提供确切的方案。

有一组10个HTML文件,所有这些文件都是静态的,只有HTML / CSS / JavaScript位于IIS网络服务器上的网站上。不允许使用ASP,ASP.NET,PHP和所有其他服务器端技术。这10个HTML文件的名称会发生​​变化,大小会发生变化等。需要解决的问题是显示该点和时间内该目录中文件的信息(未启用目录浏览,我将添加)

  1. 从IIS
  2. 请求fileinfo.html
  3. 浏览器包含fileinfo.html
  4. fileinfo.html具有回调到IIS以获取文件和大小信息的JavaScript / jQuery
  5. IIS报告有关文件的JavaScript / jQuery信息
  6. 如果不使用某种服务器端技术,我认为不可能实现第3步。但是,我只是想确保没有我听说过的新黑客。

6 个答案:

答案 0 :(得分:1)

修改

在您在问题的第二部分中描述的特定情况中,我不得不说。我真的不知道如何只使用Javascript来确定服务器上的数字或文件,大小和名称。


以前,我声明您可以,只要您允许自己使用大多数浏览器Javascript实现中提供的XML HTTP Request对象,并且您允许某些文件系统信息可以通过识别服务器上运行的服务器软件来推断(即如果它是IIS,它可能是NTFS,如果它是Appache,它可能是ext3 ......等等)。不可否认,这不是一个完美的解决方案,也不是最好的hacky。

This page shows how to use the XML HTTP Request object。特别是,查看显示如何获取HTTP标头的示例。从那里,您需要做的就是向托管您的javascript文件的服务器发出请求,然后检查服务器标题行,该行应该告诉您托管您请求的文件的服务器。

答案 1 :(得分:1)

不,除非网络服务器以某种方式发布此信息,否则无法实现。正如您所说,需要在某个时刻运行可执行文件(要么发布静态信息,要么在请求时动态检查)。 AJAX通过在后端使用URL来工作。如果没有URL来获取文件系统信息,则无法实现。

以上答案概述了如何使其成为可能所有依赖于在某些时候运行可执行代码以将信息发布到URL。我不得不两次阅读这个问题,以确保提问者来自的是安全而非“如何”。

答案 2 :(得分:1)

我唯一可以想到的是,如果不借助服务器端脚本,可以使用目录浏览并使用隐藏的框架在浏览器中加载目录,然后使用JavaScript来解析隐藏框架的HTML并获取你需要的信息。

但这是一个黑客而不是一个非常好的解决方案。此外,它可能违反了您的无目录浏览规定 - 虽然普通用户无法直接查看该目录,因为它是可索引的,并且因为您将其显示在隐藏的框架中,所以有人无法弄清楚如何查看该目录的内容。

答案 3 :(得分:1)

如果您事先知道文件名列表,或者可以在Javascript中生成/枚举可能的文件名,您当然可以通过XMLHttpRequest对象使用HTTP HEAD请求测试它们的存在,修改时间和大小,或者更简单地说, jQuery $.ajax函数:

urls = ["/file1.html", "/file2.html", "..."]
$.each(urls, function(url) {
  $.ajax(type: "HEAD", url: url, complete: function(data) {
    var headers = XMLHttpRequest.getAllResponseHeaders()
    # ...iterate over headers, using 'Content-Length', 'Content-Type', etc., 
    # to infer needed file information
  })
})

如果无法提前知道文件名或以编程方式生成文件名,则除非为相关目录启用了DAV,否则您将无法枚举它们。但是,任何不愿意让您使用PHP或ASP的主机也不太可能提供DAV服务。 (但是,如果你有DAV,你可以使用PROPFIND HTTP动词将目录的内容作为XML获取,然后在客户端的Javascript中处理该XML。)

答案 4 :(得分:0)

您需要做的就是找到一种方法来包含网络服务器信息并将其粘贴到html文件中。

您可以使用使用统计信息更新静态页面的cron作业,或使用<insert language here>动态生成它。

我可以专门针对IIS发言,但Tomcat附带一个状态xml提要,其中包含以下内容:http://localhost:8080/manager/status?XML=true

答案 5 :(得分:0)

在没有设置服务器代码的情况下,为了向您提供该信息,您可以获得“有关文件系统的信息”的唯一程度是URL路径中隐含的“有关文件系统的信息”,如果可用,索引。