-1

github (flickrTest.html) で Web ページをホストしており、Web ページと同じディレクトリにフォルダーが存在することを確認しようとしています。ホストされたフォルダーは次のようになります: 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 と見なされ、Web ページがホストされているサイトは https であるため、混合コンテンツ エラーが発生します。絶対パスを含めると、どういうわけか mapData の JSON ファイルにアクセスできます。https 経由でフォルダーの存在を確認する方法はありますか?

4

1 に答える 1

1

まず、あなたのアプローチには根本的な問題があります。他の人がコメントで述べているように、Web サーバーはユーザーのブラウザーの情報として提示できる HTML で応答することを期待するため、フォルダーにコンテンツがある (または存在する) かどうかを単純な http (または https) Web 要求で確認することはできません。ディレクトリ要求を処理するハンドラーまたはスクリプトを作成し、使用しているプラ​​ットフォームに応じて .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 が空の (または存在しない) ディレクトリ リクエストに応答するように構成されているためです。このリクエストを処理するには、ある種のサーバー側ハンドラーが必要です。または、JavaScript が結果を解析できるように、そのフォルダーに index.html を配置するなど、別のクリエイティブを考え出す必要があります。たとえば、フォルダーに index.html をドロップすると、サーバーが 200 を返した場合はフォルダーが存在することがわかりますが、404 を返した場合はフォルダーが存在しないと見なすことができます。

まだ知られていない場合に備えて、Web サーバーは、ブラウザーがコンテンツのリバース エンジニアリングを制限できるように設計されています。ディレクトリ コンテンツを返すようにサーバーを構成できますが、既定では、ほとんどのサーバーがフォルダーを保護するため、リモート ユーザーは何らかの昇格されたアクセス許可/認証なしでサーバーを参照できません。本質的に、これがよりカスタマイズされたサーバー側のアプローチを必要とする理由は、フロントエンド コードに何か問題があるからではなく、サーバーが許可するように構成されていない限り、Web サーバーがこの種のことを許可しないように設計されているためです。セキュリティのため。

于 2016-08-27T16:59:10.717 に答える