私はhtml5-JavaScriptアプリ(PhoneGapを使用するモバイルデバイス用)を作成しています。 RESTサービスとやり取りする必要があります。
サービスは"http://localhost:8080/backend/mvc/"
で実行中です
ワンプサーバー(Apache2)でアプリを開発しています(http://localhost/stage/
)Chrome for browserを使用しています。
ajax呼び出しを実行すると、ブラウザは次のように応答します:XMLHttpRequest cannot load http://localhost:8080/backend/mvc/event. Origin http://localhost is not allowed by Access-Control-Allow-Origin.
したがって、このクロスドメインのajax呼び出しの問題を回避するいくつかの方法を見つけます。
1)開始chrome chrome.exe --disable-web-security
=>違いなし
2)mod_proxyを使用してApacheを構成し、トラフィックをリダイレクトします。
私はhttpd.confで有効にしました:
proxy_module
proxy_connect_module
proxy_http_module
次の内容を含む.htaccess
ファイルをwwwルートに配置します。
# start mod_rewrite
RewriteEngine On
ProxyRequests off
<Proxy>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /EMBackend/ http://localhost:8080/backend/mvc/
ProxyPassReverse /EMBackend/ http://localhost:8080/backend/mvc/
RewriteRule ^/EMBackend/(.*)$ /backend/mvc/$1 [R]
すべてのサービス(Apache、phpなど)を再起動しました
エラー500になります
Apacheエラーログ:[Tue Oct 18 14:30:11 2011] [alert] [client 127.0.0.1] C:/wamp/www/.htaccess: ProxyRequests not allowed here
これを解決する方法についての手がかりはありますか?
私は実用的な解決策を見つけました:
有効化:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
これを構成(またはApache仮想ホストを使用している場合は、目的の仮想ホスト)のメインセクションに配置します。
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /EMBackend http://localhost:8080/backend/mvc
ProxyPassReverse /EMBackend http://localhost:8080/backend/mvc
<Location /EMBackend>
Order allow,deny
Allow from all
</Location>
だから私はそれを.htaccess
に入れることができないか、またはProxyPreserveHost On
を設定しなければならなかったと思います。 Include conf/extra/
ファイルにhttpd.conf
を入れてhttpd-proxy.conf
ファイルを作成し、その上にスクリプトを入れました。 Apacheを再起動すると動作します!
最新のApacheでは、次の方法でプロキシをオンにします。
a2enmod proxy;
a2enmod proxy_http
プロキシモジュールを有効にした後、httpd.confに特定の行を追加するだけで済みます。
ProxyPreserveHost On
ProxyPass /EMBackend http://localhost:8080/backend/mvc
ProxyPassReverse /EMBackend http://localhost:8080/backend/mvc
サーバーを再起動するだけで完了です。