为什么 leafletjs 可以使用来自非 CORS 服务器的地图瓦片而其插件不能?

Why can leafletjs use map tiles from a non-CORS server and its plugins cannot?

我有一个令人费解的问题:我在内部网页上使用 Leaflet 来显示带有一些自定义图层的地图。

比如说,网页位于内部服务器 showdata.local。地图图块来自另一个名为 maps.local 的内部服务器。 Leaflet 在给定适当的图块 URL http://maps.local/terraintiles/{z}_{x}_{y}.png 的情况下完美地找到了图块。 - 因此 Leaflet 的 JavaScript(浏览器中 运行)可以清楚地从图块服务器 maps.local 中检索图像。到目前为止一切顺利。

现在我正在尝试使用一些 Leaflet 插件在客户端(即浏览器)上将地图(带有自定义图层)导出为图像。我试过了Leaflet.BigImage and leaflet-image。 - 但在这两个插件中,当我尝试导出地图时,我在图块 URLs 上收到 CORS 错误。我假设插件需要再次检索图块以构建带有地图的虚拟 canvas。

我不明白的是:为什么我在插件中出现CORS错误,而Leaflet的JavaScript代码可以自由加载tiles?如果 tile 服务器不允许 CORS,不应该两者都被禁止吗?

要导出地图,插件需要从文件中读取图像数据到JS中并生成新图像。这需要 CORS 的许可。

要显示地图图块,Leaflet 只需在页面上放置一个图像元素,然后让浏览器将其显示给用户。图像数据从不接触JS。

进一步阅读: