API への依存度が高く、同時に API 自体と同じドメインに存在できない Web アプリケーションを開発する必要がある場合、非同期 HTTP リクエストを作成するときに「同一オリジン ポリシー」を回避するのは非常に困難です。 (AJAX)。ある時点で、(Windows 7 を実行している) 私のコンピューターに WAMP をインストールし、Apache でリバース プロキシを構成するように勧められました。同じ人が、ファイル内にdevhttpd.conf
という名前の IP 127.0.0.1 のエイリアスを作成するように指示した後、ファイルに追加した以下の Apache ディレクティブを提供してくれました(実際に実行しました)。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
。
残念ながら、同じ URL (以下のコード) への AJAX 要求により、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 からファイルを取得し、dev:8080 に ajax することです」と言われました。私の経験不足を考えると、これもあまり意味がありません。