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是否可行。
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 如何利用多链接延迟检查并显示ping结果,然后使用JavaScript选择最快的URL
- 如何记录.pushState(),然后立即转到URL栏中的页面
- 如何通过URL下载文件,然后获取其名称
- Json 字符串化然后从 URL 解析
- 获取当前URL,替换部分路径名,然后在空白选项卡中打开
- Javascript按钮,它提交联系人表单7表单,然后重定向到URL
- jQuery检查URL,然后显示和隐藏元素
- JS将复选框中的值添加到URL,然后单击转到URL
- ExtJS——更改代理URL然后加载存储不会更新网格
- 每次我点击我的网站,它都会重定向到home.html,然后返回到我点击的所需url
- 从文本框中附加url,然后使用javascript打开新窗口
- 使用ajax发布表单,然后将相同的表单提交到其他url
- Javascript:检查window.fullScreen是否为假,然后在新窗口中全屏打开url
- 加载一个附加的 JavaScript 的新 URL,然后将更多 JS 附加到该新 URL
- 想要通过GET方法从URL获取值,然后想在我的标题区域的右上角显示这些值
- 如何清除然后用JavaScript附加URL
- JavaScript 在 URL 中传递变量,然后选择选项
- 打开一个带有URL的iframe,然后运行一些JS
- 在表单中获取选项值,然后在 url 中使用它