Javascript CORS标题未设置-我可以请求图像url,然后将其返回给我自己吗?

Javascript CORS标题未设置-我可以请求图像url,然后将其返回给我自己吗?,javascript,php,xmlhttprequest,cors,webgl,Javascript,Php,Xmlhttprequest,Cors,Webgl,我正在尝试用从图像编译的网格填充WebGL Earth。这些映像是跨域的,并且托管在服务器上,在服务器上设置适当的头不是一个选项。我是否可以XMLHttpRequest图像URL,然后通过PHP将它们返回给我自己以绕过CORS错误 或者,更具体地说,我可以使用自己的Web服务器作为代理,在WebGL上下文中为自己提供img URL(绕过CORS) 编辑:这里真正的问题是,我是否可以使用自己的Web服务器作为代理来传递URL,或者我是否必须将每个图像下载到服务器,然后使用它。我曾经使用API遇到过

我正在尝试用从图像编译的网格填充WebGL Earth。这些映像是跨域的,并且托管在服务器上,在服务器上设置适当的头不是一个选项。我是否可以XMLHttpRequest图像URL,然后通过PHP将它们返回给我自己以绕过CORS错误

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


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

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

我的解决方案是切换到PHP并在服务器端执行,因为现代浏览器会阻止您要执行的操作


所以是的,这是可能的。 在后端获取图片,然后将其提供给前端


只需先检索图片,然后将其作为输出发送到浏览器。您可以通过执行以下操作同步执行此操作:

$ch = curl_init ... 
...
$pic = curl_exec ... // get the picture

// and then echo it
这件事我做过一次,但记不清了。或者您可以异步执行,这通常是在使用img标记时执行的。我不确定它如何与WebGL配合使用,但应该类似:

  • 将pic下载到您的文件系统
  • 然后将URL提供给浏览器
然后,这取决于图像的大小、您需要它们的时间以及API是否希望朝这个方向发展


对第一条评论的回答:

狡猾。我没有使用WebGL Earth的经验,也没有通过Ajax(look)或使用AngularJS(look)异步加载数据的经验。你需要试试那个。我会特别关注装载时间

有一个API调用,如
http://example.com/api/get_image/65446
下载图片,调整大小,然后将其发送到浏览器

在这种情况下,您要做的是:

  • 将“正常”页面发送给用户
  • 然后,您可以在那里查找要显示图片的事件
  • 当事件发生时,使用我刚才提到的API调用,并使用成功处理程序将其添加到页面中。再说一次,我无法回答的另一个问题是,如何使用WebGL Earth
如果你想在移动设备上使用它,你需要考虑图片的大小。由于屏幕相对较小,您应该先将图片缩小。但是,需要多长时间才能拍到这张照片我想这是最大的挑战。想要滚动地球仪的人希望立即看到图片,而不是5秒钟后(因为我滚动的可能性更大)


考虑是否可以先准备下载并调整大小。如果您只想显示某些图片,比如总共10.000张,我会这样做。这样你就不需要考虑加载时间和删除图片的时间了。您应该针对该主题提出另一个问题,并首先尝试Ajax是否可行。

如果您的意思是“使用您自己的Web服务器作为另一个Web服务器的代理”,那么您可以@是的,我就是这个意思。更具体地说,我可以使用我自己的Web服务器作为代理,在WebGL环境中为自己提供img URL(绕过CORS)?您要做的是使用其他来源的图片并将它们放入WebGL Earth。你有一个例子给我们看吗?你的问题是,你收到一条错误消息,上面说的是CORS错误。那是在浏览器中吗?错误说明了什么?@hogan是的,我想使用其他来源的图片。这里真正的问题是,我是否可以使用自己的Web服务器作为代理来传递URL,或者我是否必须将每个图像下载到服务器,然后使用它。这是错误:“访问磁贴时出错。WebGL的地图磁贴上应用了跨域访问限制。请在远程域()上使用CORS,或将应用程序与磁贴放在同一域上(将应用程序和磁贴托管在同一域上或运行磁贴代理)。”,在远程域上启用CORS不是一个选项。在另一个问题出现之前,我已经写了一个答案:你想在WebGL Earth中使用什么组件?是我们吗?tileLayerJSON()?谢谢,这大概就是我想要做的。您认为在需要调用10-50个图像(每个图像大约200kb)的情况下,这是否有效?我没有以这种方式使用临时缓存或PHP的经验。这是一个动态生成的网格,因此当用户在全球滚动时,将调用图像。另外,由于您的解决方案需要PHP,我将如何在页面加载后动态调用它?@johndoe,您的问题是否得到了部分回答。异步API调用并不是最难的部分——使用普通的js可以轻松地完成。我在问是否可以动态地(即在页面加载后)发出XML请求,然后将返回的img url下载到Web服务器,然后将图像传递到浏览器—所有这些都是在页面加载后进行的。如果在页面加载后无法执行此操作,那么可能唯一的选择就是请求整个全球的图像,这将是一个巨大的带宽。我不太清楚“页面加载后”是什么意思。我认为答案是带有监听事件的提示,即用户滚动到特定位置。然后调用脚本。在WebGL Earth中检查这是否可行。