WebGLアプリケーションのCORS制限を回避しようとしています。 URLを解決して画像を返すWebサービスがあります。このWebサービスはCORS対応ではないため、返された画像をテクスチャとして使用できません。
私は計画していました:
PHPスクリプトは:
CURL、HTTPResponse、プレーンvar_dumpなどのさまざまな手法を使用してこれを実装しようとしましたが、それぞれの時点で行き詰まりました。
だから私は2つの質問があります:
CURLで最も進歩しました。私は画像ヘッダーとデータを次のようにして得ることができます:
$ch = curl_init();
$url = $_GET["url"];
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:image/jpeg'));
//Execute request
$response = curl_exec($ch);
//get the default response headers
$headers = curl_getinfo($ch);
//close connection
curl_close($ch);
ただし、これによって実際にレスポンスのcontent-typeがimage/jpegに設定されることはありません。ヘッダー+応答をcontent-type text/htmlの新しい応答にダンプし、ブラウザーにヘッダーと画像BLOBデータを表示します。
希望する形式で応答を送信するにはどうすればよいですか?
最も単純なアプローチが答えであることが判明しました。応答を送信する前にヘッダーを挿入する必要がありました。
$ch = curl_init();
$url = $_GET["url"];
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
//Execute request
$response = curl_exec($ch);
//get the default response headers
header('Content-Type: image/jpeg');
header("Access-Control-Allow-Origin: *");
//close connection
curl_close($ch);
flush();
ヘッダー付きのものをすべて使用する前に、Apache(Apacheを使用している場合)にmod_headersがロードされていることを確認してください。
(以下のヒントはUbuntuで機能しますが、他のディストリビューションについては知りません)
ロードされたモジュールのリストを確認することができます
Apache2ctl -M
使用できるmod_headersを有効にする
a2enmod headers
もちろん、Apacheを変更した後は、再起動する必要があります。
/etc/init.d/Apache2 restart
この後、この行を.htaccessに追加するか、もちろんphpヘッダーを使用してください
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
PHP:
header("Access-Control-Allow-Origin: *");