#javascript #ajax #apache #cross-domain
#javascript #ajax #apache #междоменный
Вопрос:
Я создаю приложение на html5 — JavaScript (для мобильных устройств, используя PhoneGap). Я должен взаимодействовать со службой REST.
Служба теперь работает на "http://localhost:8080/backend/mvc/"
Я разрабатываю свое приложение на сервере wamp (apache2) ( http://localhost/stage/
) Я использую Chrome для браузера.
при предварительной обработке вызова 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) настройка apache с использованием mod_proxy для перенаправления трафика.
Я включил в 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
Есть какие-либо подсказки о том, как это решить?
Ответ №1:
Я нашел рабочее решение:
Включить:
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, и он работает!
Ответ №2:
Вы могли бы просто добавить указанные строки в httpd.conf после включения прокси-модулей.
ProxyPreserveHost On
ProxyPass /EMBackend http://localhost:8080/backend/mvc
ProxyPassReverse /EMBackend http://localhost:8080/backend/mvc
Просто перезапустите сервер, и все готово.
Ответ №3:
В очень современном apache включите прокси с помощью:
a2enmod proxy;
a2enmod proxy_http