14

WebGLアプリケーションでのCORS制限を回避しようとしています。URLを解決して画像を返すWebサービスがあります。このWebサービスはCORSに対応していないため、返された画像をテクスチャとして使用できません。

私は次のことを計画していました:

  1. 画像リクエストを処理するPHPスクリプトを作成する
  2. 画像リクエストは、URLパラメータとしてクエリ文字列を介して送信されます

PHPスクリプトは次のようになります。

  1. クエリ文字列URLを使用してWebサービスを呼び出します
  2. 画像応答を取得します(Webサービスはcontent-type:image応答を返します)
  3. CORSヘッダー(Add Access-Control-Allow-Origin)を応答に追加します
  4. ブラウザに応答を送信します

CURL、HTTPResponse、plain var_dumpなどのさまざまな手法を使用してこれを実装しようとしましたが、それぞれのある時点でスタックしました。

だから私は2つの質問があります:

  1. アプローチは十分ですか?
  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-typetext/ htmlの新しい応答にダンプし、ヘッダーと画像のBLOBデータをブラウザーに表示します。

必要な形式で応答を送信するにはどうすればよいですか?

4

2 に答える 2

15

最も単純なアプローチが答えであることが判明しました。応答を送信する前にヘッダーを挿入する必要がありました。

    $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();
于 2012-10-16T22:58:10.020 に答える
7

ヘッダー付きのものをすべて使用する前に、Apache(Apacheを使用している場合)にmod_headersがロードされていることを確認してください。

(以下のヒントはUbuntuで機能しますが、他のディストリビューションについてはわかりません)

ロードされたモジュールのリストを確認できます

apache2ctl -M

使用できるmod_headersを有効にするには

a2enmod headers

もちろん、Apacheに変更を加えた後は、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: *");
于 2013-12-08T11:38:55.977 に答える