CORS标头未设置-我可以请求一个图像url,然后将其发送回自己吗


CORS header not set - can I request an image url and then serve it back to myself?

我正试图用从图像编译的网格填充WebGL Earth。这些图像是跨域的,托管在服务器上,在服务器上无法设置适当的标头。我可以XMLHttpRequest图像URL,然后通过PHP将它们提供给我自己以绕过CORS错误吗?

或者,更具体地说,我可以使用我自己的Web服务器作为代理,在WebGL上下文中为自己提供img URL(绕过CORS)吗?

EDIT:这里真正的问题是,我是否可以使用自己的Web服务器作为代理来传递URL,或者我是否必须将每个图像下载到服务器才能使用它。

我曾经在使用API时遇到过类似的问题。首先,我尝试在JS中执行所有操作,可能会得到与您相同的错误消息。

我的解决方案是切换到PHP并在服务器端执行它,因为现代浏览器会阻止你想做的事情


所以是的,这是可能的

在后台获取图片,然后将其提供给前端。


只需先检索图片,然后将其作为输出发送到浏览器即可。你可以通过做一些类似的事情来同步地做到这一点:

$ch = curl_init ... 
...
$pic = curl_exec ... // get the picture
// and then echo it

我做过一次,但记不清了。或者您可以异步执行,这通常是在使用img标记时执行的。我不确定它是如何与WebGL协同工作的,但应该类似:

  • 将图片下载到文件系统
  • 然后将URL提供给浏览器

这取决于图像有多大,需要多长时间,以及API是否要朝这个方向发展。


第一条评论的答案:

狡猾。我没有使用WebGL Earth的经验,也不知道是否可以通过Ajax异步加载数据(请看这里),或者如果你在其中使用AngularJS(请看此处)。你需要尝试一下。我会特别研究装载时间。

有一个类似http://example.com/api/get_image/65446的API-call可以下载图片,调整大小,然后将其发送到浏览器。

在这种情况下,你会做的是:

  • 将"正常"页面发送给用户
  • 然后,您可以在那里查找要显示图片的事件
  • 当事件发生时,使用我刚才提到的API-call,并使用成功处理程序将其添加到页面中。同样,我无法回答的另一个问题是如何与WebGL Earth合作

如果你想在移动设备上使用它,你需要考虑图片的大小。由于屏幕相对较小,您应该先将图片缩小。但是,我想这是最大的挑战。想要滚动地球仪的人希望立即看到图片,而不是在5秒钟后(因为我滚动的可能性更大)

考虑是否可以先准备下载并调整大小如果你只想显示某些图片,比如总共10000张,那么我会这么做。然后你就不需要考虑加载时间以及何时删除哪些图片了。您应该为该主题打开另一个问题,并首先尝试Ajax是否可行。