J'essaie de contourner la restriction CORS sur une application WebGL. J'ai un service Web qui résout l'URL et renvoie des images. Étant donné que ce service Web n'est pas compatible avec CORS, je ne peux pas utiliser les images renvoyées comme textures.
J'avais l'intention de:
Le script PHP:
J'ai essayé de l'implémenter en utilisant une variété de techniques, y compris CURL, HTTPResponse, plain var_dump etc., mais je suis resté bloqué à un moment donné dans chacune.
J'ai donc 2 questions:
J'ai fait le plus de progrès avec CURL. Je pourrais obtenir l'en-tête de l'image et les données avec:
$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);
Mais cela ne change en fait pas de définir le type de contenu de la réponse sur image/jpeg. Il vide l'en-tête + la réponse dans une nouvelle réponse de type texte/html et affiche l'en-tête et les données BLOB de l'image dans le navigateur.
Comment puis-je lui envoyer la réponse dans le format que je souhaite?
L'approche la plus simple s'est avérée être la réponse. Juste eu à insérer l'en-tête avant d'envoyer la réponse.
$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();
assurez-vous qu'Apache (si vous utilisez Apache) a mod_headers chargé avant d'utiliser tout cela avec des en-têtes.
(les conseils suivants fonctionnent sur Ubuntu, je ne connais pas les autres distributions)
vous pouvez vérifier la liste des modules chargés avec
Apache2ctl -M
pour activer les mod_headers, vous pouvez utiliser
a2enmod headers
bien sûr, après tout changement dans Apache, vous devez le redémarrer:
/etc/init.d/Apache2 restart
après cela, essayez d'ajouter cette ligne à votre .htaccess, ou bien sûr, utilisez des en-têtes php
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
PHP:
header("Access-Control-Allow-Origin: *");