Я пытаюсь обойти ограничение CORS в приложении WebGL. У меня есть веб-служба, которая разрешает URL-адрес и возвращает изображения. Поскольку эта веб-служба не поддерживает CORS, я не могу использовать возвращенные изображения в качестве текстур.
Я планировал:
- Напишите PHP script для обработки запросов изображений
- Запросы изображений будут отправляться через строку запроса в виде URL-адреса Параметр
PHP скрипт будет:
- Вызовите веб-службу с помощью строки запроса url
- Получить ответ изображения (веб-служба возвращает ответ типа содержимого: изображение)
- Добавьте заголовок CORS (Добавить Access-Control-Allow-Origin) в ответ
- Отправить ответ в браузер
Я попытался реализовать это, используя различные методы, включая 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();