【问题标题】:How do I check if a folder exists over https如何检查文件夹是否存在于 https
【发布时间】:2016-08-26 16:40:37
【问题描述】:

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

【问题讨论】:

  • 标题的悬念要了我的命!
  • 请不要使用 clickbait 风格的标题来提问。将整个问题发布到问题所在的位置(标题)。
  • 您无法通过 AJAX 读取整个文件夹。您只能访问单个文件。
  • 这是一个相对 URL。不太可能从中获得混合内容。
  • @MikeC — 对于“文件夹”,我认为我们可以阅读“映射到网络服务器文件系统上的目录的 URL,服务器返回索引文件或自动生成的目录列表”

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


【解决方案1】:

首先,您的方法存在一个根本问题。正如其他人在 cmets 中所说,您无法通过简单的 http(或 https)Web 请求检查文件夹是否包含内容(或存在),因为 Web 服务器将期望以 HTML 响应,该 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 服务器被设计为不允许这种类型的事情,除非服务器被配置为允许它出于安全考虑。

【讨论】:

  • 这解释得非常好。感谢您的详细回复!
  • 我很高兴它有帮助。祝你好运!
猜你喜欢
  • 2013-03-12
  • 2018-01-15
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 2018-12-26
  • 1970-01-01
  • 2011-02-21
  • 2013-08-24
相关资源
最近更新 更多