2017-01-10 5 views
0

私は、htmlページのjavascriptを使用してAjax GET呼び出しを行うプロトタイプアプリケーションを構築しています。私が使用しています構成は次のとおりです。Windows7上のApache Serverを経由したMongoDBへのCORSアクセス

のWindows/Apache Webサーバ(XAMPP) MongoDBの Chromeブラウザ

すべて同じのWindows7(32)マシン上で実行されています。 mongodbサーバーとデータはC:\パスにインストールされます。 ApacheサーバーはC:\ XAMPPパスにあります。ブラウザから直接MongoDBサーバーにアクセスできます。たとえばへの呼び出し:

はlocalhost:28017 /データベース/コレクション

はJSON形式でコレクションのデータを返します。私はhtmlページを経由してJavaScriptで同じAjax呼び出しを実行してみた場合

はしかし、私はエラーを取得:// localhostを:28017 /データベース/コレクション

のXMLHttpRequestは、httpをロードすることはできません。要求されたリソースに「Access-Control-Allow-Origin」ヘッダーが存在しません。したがって、 'http:// localhost'はアクセスが許可されていません。

私は/私のhttpd.confファイルを検査修正し、ため、次のセットがあります。

のLoadModule headers_moduleモジュール/ mod_headers.so

を:私もheaders_moduleがロードされていることを確認した

<Directory /> 
    Header always set Access-Control-Allow-Origin "*"  
    Header always set Access-Control-Max-Age "1000" 
    Header always set Access-Control-Allow-Headers "X-Requested-With, Content-Type, 
Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding" 
    Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT" 
AllowOverride none 
Require all denied 
</Directory> 

ただし、これは機能しません。ポート番号は、htmlとajaxの間で変更されています(80対28017)。したがって、新しいドメインです。ここで

スクリプトコードです:ここで

var xhr = new XMLHttpRequest(); 
console.log("xhr open") 
xhr.open("GET", "http://localhost:28017/ database/ collection/", false); 
xhr.send(); 

は、HTMLコールからのレスポンスヘッダは以下のとおりです。

Accept-Ranges:bytes 
Access-Control-Allow-Headers:X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding 
Access-Control-Allow-Methods:POST, GET, OPTIONS, DELETE, PUT 
Access-Control-Allow-Origin:* 
Access-Control-Max-Age:1000 
Connection:Keep-Alive 
Content-Length:564 
Content-Type:text/html 
Date:Mon, 09 Jan 2017 23:47:06 GMT 
ETag:"234-545b12ed82b40" 
Keep-Alive:timeout=5, max=100 
Last-Modified:Mon, 09 Jan 2017 22:49:41 GMT 
Server:Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/5.5.38 

そしてXHRコールからのすべてのヘッダー:

General 
Request URL:http://localhost:28017/ database/ collection/ 
Request Method:GET 
Status Code:200 OK 

Response Headers 
Connection:close 
Content-Length:369 
Content-Type:text/plain;charset=utf-8 
x-action: 
x-ns:database.collection 

Request Headers 
Accept:*/* 
Accept-Encoding:gzip, deflate, sdch, br 
Accept-Language:en-US,en;q=0.8 
Connection:keep-alive 
Host:localhost:28017 
Origin:http:// localhost 
Referer:http://localhost/ load_mongodb_data.html 
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 

どんな援助も感謝します

答えて

0

CORSが制限R esourcesから要求することができる機構(Sがharedに)別のドメインである - すなわち、 "CロスO RIGIN" ...それは持つことができ、資源制御所有しているドメイン - これは、CORSの重要な部分であるリソース許可の所有者またはあなたのケースでは、リソース

へのアクセスを拒否し、要求を作成し、ページがポートで提供していますが80、リソースは、ポート80の

だと思うが、ポート28017のあなたリソース

と思いますが、よそのドメインであることをあなたドメインとしてポート28017上で要求された、と彼らはあなたが使用したいいくつかのリソースを持っています

それは、CORSが働いていた方法です場合、CORSは

を開始するための必要はないと思います - あなたは あなたドメインの「CORSを有効にする」と、他のドメインが、あなたはそれのリソースへのアクセスを許可することを期待することはできません

あなたがする必要があるのは、ポート28017上で実行されているサーバー上のAccess-Control- *ヘッダーを設定することです。

+0

私はMongoDBサーバーがヘッダーを提供しなければならないことがわかります。ありがとう、それは非常に有用です。 – user2653942

関連する問題