我正在尝试解决WebGL应用程序上的CORS限制问题。我有一个Web服务,它解析URL并返回图像。由于此Web服务未启用CORS,因此我无法将返回的图像用作纹理。
我打算:
PHP脚本将:
我尝试使用各种技术实现这一点,包括CURL,HTTPResponse,plain var_dump等,但在每个技术的某些方面都被卡住了。
所以我有两个问题:
我用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);
但实际上并没有改变将响应内容类型设置为image / jpeg。它将标头+响应转储到内容类型text / html的新响应中,并在浏览器中显示标题和图像BLOB数据。
如何让它以我想要的格式发送响应?
答案 0 :(得分: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();
答案 1 :(得分:7)
确保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: *");