我正在尝试解决 WebGL 应用程序上的 CORS 限制。我有一个可以解析 URL 并返回图像的 Web 服务。由于此 Web 服务未启用 CORS,因此我无法使用返回的图像作为纹理。
我本来打算:
- 编写 PHP 脚本来处理图像请求
- 图像请求将通过查询字符串作为 url 发送
范围
PHP 脚本将:
- 使用查询字符串 url 调用 Web 服务
- 获取图像响应(Web 服务返回内容类型:图像响应)
- 将 CORS 标头(添加 Access-Control-Allow-Origin)添加到
回复
- 将响应发送到浏览器
我尝试使用各种技术来实现这一点,包括 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。它将 header + 响应转储到内容类型为 text/html 的新响应中,并在浏览器中显示 header 和图像 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
header('Content-Type: image/jpeg');
header("Access-Control-Allow-Origin: *");
//close connection
curl_close($ch);
flush();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)