Необходимость разработки веб-приложения, которое в то же время сильно зависит от API, но в то же время не может находиться в том же домене, что и сам API, было довольно сложно обойти "политику одинакового происхождения" при создании асинхронные HTTP-запросы (AJAX).
В какой-то момент мне было рекомендовано установить WAMP на моем компьютере (под управлением Windows 7) и настроить обратный прокси с Apache.
Тот же самый человек дал мне директивы Apache, которые я добавил в файл httpd.conf
, после того, как сказал мне создать псевдоним для IP 127.0.0.1 с именем dev, в файле c:\windows\system32\drivers\etc\hosts
( что я и сделал):
LoadModule headers_module modules/mod_headers.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule ssl_module modules/mod_ssl.so
Listen 127.0.0.1:8080
ProxyRequests off
<Proxy *>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Proxy>
<VirtualHost dev:8080>
ProxyPass / https://app.somesite.com:5002/
ProxyPassReverse / https://app.somesitecom:5002/
ProxyPassReverseCookieDomain app.somesite.com dev
Header edit Location ^https://dev(:8080)?(.+)$ http://dev$1$2
Header edit Set-Cookie "(^.+); secure; HttpOnly$" "$1; HttpOnly"
SSLProxyEngine on
SSLProxyVerify none
</VirtualHost>
Поскольку я полный новичок, когда дело доходит до настройки серверов, я просто вставлял директивы и, к счастью, достаточно, прокси работал. Он возвращает правильный ответ API, когда я использую адресную строку браузера для доступа, например, http://dev:8080/a/w/currencies
.
К сожалению, хотя запрос AJAX на тот же URL-адрес (ниже приведенный ниже код) заставляет Chrome дать мне ошибку XMLHttpRequest cannot load http://dev:8080/a/w/currencies. Origin http://dev is not allowed by Access-Control-Allow-Origin.
.
$.ajax({
url: "http://dev:8080/a/w/currencies",
type: "GET",
dataType: "json",
data: {
},
success: function(data){
console.log(data);
}
});
Итак, что еще нужно сделать, чтобы этот прокси работал с AJAX?
Мне рассказали что-то о директиве alias
, но не достаточно конкретны и понятны, поэтому это не имело большого смысла для моего неопытного мозга.
PS: Также мне сказали: "Проблема в том, что вы получаете файлы с dev: 80 и ajaxing для dev: 8080". Учитывая мою неопытность, это не имеет большого значения.