未设置CORS标头 - 我可以请求图片网址,然后将其提供给自己吗?

时间:2015-06-29 15:19:30

标签: javascript php xmlhttprequest cors webgl

我正在尝试使用从图像编译的网格填充WebGL地球。这些映像是跨域的,并托管在服务器上,其中不能选择设置适当的标头。我可以XMLHttpRequest图像网址,然后通过PHP将它们回馈给自己以绕过CORS错误吗?

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

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

1 个答案:

答案 0 :(得分:1)

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

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

是的,这是可能的。

在后端获取图片,然后将它们提供给前端。

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

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

// and then echo it

我曾经做过一次,但没有记错。或者你可以做异步,使用img-tags时通常会做什么。我不确定它如何与WebGL协同工作,但应该是类似的:

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

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

回答第一条评论:

棘手。我没有使用WebGL Earth的经验以及是否可以通过Ajax加载数据异步(看here)或者是否使用AngularJS(看here)。你需要尝试一下。我特别关注加载时间。

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

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

  • 发送'正常'用户页面
  • 然后在那里查找要显示图片的事件
  • 当事件发生时,使用我刚才提到的API调用,并使用成功处理程序将其添加到您的页面。再一次,如何使用WebGL地球是另一个我无法回答的问题。

如果你想将它用于移动设备,你需要考虑图片大小。由于屏幕相对较小,您应首先使照片变小。但是,获得图片需要多长时间我认为这是最大的挑战。想要在全球范围内滚动的人希望立即看到图片,而不是在5秒之后(因为我更可能滚动)

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