如何通过https检查文件夹是否存在

时间:2016-08-26 16:40:37

标签: javascript html ajax google-chrome mixed-content

我正在github(flickrTest.html)上托管一个网页,我正在尝试检查与网页在同一目录中是否存在文件夹。托管文件夹如下所示: http://imgur.com/a/pZWoH

我尝试使用这样的ajax调用:

$.ajax({
            url: 'mapData',
            error: function() {
                //Ddirectory doesn't exist
                console.log("ERROR: expected directory named 'mapData'. Exiting...");
                return
            },
            success: function() {
                //Directory does exist
                console.log("mapData exists..");
             ...

但是我收到了混合内容错误,因为此调用被视为http,我的网页托管的网站是https。不知何故,如果我包含绝对路径,我就能访问mapData的JSON文件。有没有办法检查https上是否存在文件夹?

1 个答案:

答案 0 :(得分:1)

首先,您的方法存在根本问题。正如其他人在评论中所述,您无法检查文件夹是否包含具有简单http(或https)Web请求的内容(或存在),因为Web服务器将期望使用可以作为用户信息呈现的HTML进行响应。的浏览器。您可以创建一个处理程序或脚本来处理目录请求,并使用.htaccess规则或其他重写系统来映射该功能,具体取决于您所使用的平台。我之所以认为这是一个"问题"并且没有说它不可能,因为你可以(因为看起来你正在尝试)将该响应解析成可用的东西。也就是说,我认为它不是重点,而是你实际得到的错误的本质。

您遇到的错误来自加载您在HTTPS中的当前页面,而您正在进行的ajax请求是通过HTTP(如错误消息所示)。在您的情况下,此消息可能会产生误导,因为并非请求URL未被标识为HTTPS,因为浏览器不相信该URL是对Web的请求文件或文件夹。您只需在文件夹中添加一个尾部斜杠即可解决此问题:

$.ajax({
        url: 'mapData/',
        error: function() {
            //Ddirectory doesn't exist
            console.log("ERROR: expected directory named 'mapData'. Exiting...");
            return
        },
        success: function() {
            //Directory does exist
            console.log("mapData exists..");
         ...

您现在已经解决了完成Web请求的问题,但是您遇到了第一部分中提到的问题。服务器将返回404错误,因为这是github.io配置为响应空(或不存在)目录请求的方式。您将需要某种类型的服务器端处理程序来处理此请求,或者您需要提供其他创意,例如将index.html放在该文件夹中,以便您的JavaScript可以解析结果。例如,您可以在文件夹中删除index.html,如果服务器返回200,那么您知道该文件夹存在,但如果它返回404,那么您可以认为该文件夹不存在。

如果还不知道,那么Web服务器就是为了使浏览器对其内容进行逆向工程而受到限制。虽然可以将服务器配置为返回目录内容,但默认情况下,大多数服务器将保护文件夹,以便远程用户在没有某种类型的提升权限/身份验证的情况下无法浏览服务器。从本质上讲,这需要一个更加自定义的服务器端方法的原因并不是因为前端代码存在问题,而是因为Web服务器被设计为在没有服务器的情况下不允许这种类型的事情配置为由于安全性而允许它。

相关问题