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

How do I check if a folder exists over https

我在 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 检查文件夹是否存在?

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

您遇到的错误是由于在 HTTPS 中加载您所在的当前页面而造成的,而您正在通过 HTTP 发出的 ajax 请求(如错误消息所示)。在您的情况下,此消息可能会产生误导,因为这并不是请求 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..");
         ...

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

万一还不知道,Web 服务器的设计目的是为了限制浏览器对其内容进行逆向工程。虽然服务器可以配置为 return 目录内容,但默认情况下,大多数都会保护文件夹,以便远程用户在没有某种类型的提升 permissions/authentication 的情况下无法浏览服务器。从本质上讲,这需要一种更加定制的服务器端方法的原因不是因为前端代码有问题,而是因为 Web 服务器被设计为不允许这种类型的事情,而服务器没有被配置为允许它由于安全原因。