Я пытаюсь обойти ограничение CORS в приложении WebGL. У меня есть веб-служба, которая разрешает URL-адрес и возвращает изображения. Поскольку этот веб-сервис не включен 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);
Но на самом деле это не меняет настройки типа содержимого ответа на изображение / jpeg. Он удаляет ответ заголовка + в новый ответ типа 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 $headers = curl_getinfo($ch); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); header('Content-Type: image/jpeg'); header("Access-Control-Allow-Origin: *"); // header("Expires: Sat, 26 Jul 2017 05:00:00 GMT"); //close connection curl_close($ch); flush();
Ответ оказался самым простым. Просто нужно было вставить заголовок перед отправкой ответа.
$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: *");