- changed status to open
Problem bei Blob-URLs
Hallo Community,
in \node_modules\@masterportal\masterportalapi\src\layer\wms.js
wird in createLayerSource() für TileWMS() eine tileLoadFunction definiert die eine Object-/Blob-URL erzeugt:
async function defaultTileLoadFunction (imageTile, src) {
const response = await fetch(src),
data = await response.blob();
imageTile.getImage().src = URL.createObjectURL(data);
}
Problem an dieser Stelle: wenn die Blob-URL aus einem isSecured-WMS generiert wird gibt es einen 401-Error.
Gilt eigenartiger Weise auch nur für singleTile=false (-> TileWMS) weil nur hier die tileLoadFunction() definiert ist. Das ist doch so nicht gewollt? Pro Tile zusäzlich noch eine Blob-Source?
Danke&VG
Dietmar Stolz
Comments (13)
-
-
-
assigned issue to
-
assigned issue to
-
Hallo Dietmar,
Kannst du noch irgendwie mehr Infos geben, wie man das konkreter nachstellen kann? Wäre es möglich da eine Beispiel-Konfiguration zu bekommen?
Dann könnte ich das besser nachvollziehen und der Sache auf den Grund gehen.Viele Grüße
Konstantin Holm
-
reporter Hallo Konstantin,
das Verhalten kannst du im https://geoportal-hamburg.de/geo-online/ nachvollziehen.
Wähle bspw. die Krankenhäuser aus, diese werden mit singleTile=false angefordert und für jede Kachel eine Blob-URL generiert. Wozu eigentlich?
Wenn der Krankenhaus-Dienst geschützt wäre (isSecured-WMS) gäbe es aufgrund der Blob-Objects einen 401-Error für den gesamten Dienst.
Habe selber keinen Secured-Dienst mit Internetzugang.
Danke für deinen Support
Dietmar Stolz
-
@Hendrik Oenings Dieses Issue steht in Relation zu Issue#1081, welches du im Oktober 2023 bearbeitet hattest. Kannst du dir das mal ansehen?
In der Git History sehe ich am 02.10.2023 von dir den Commit, wo du diedefaultTileLoadFunction
hinzugefügt hastGet WMS tiles using fetch to allow sending headers
Overriding the tileLoadFuntion to use window.fetch allows for overriding window.fetch to pass additional headers (e.g., an
Authorization header) to the WMS request.This is necessary to solve issue
in Masterportal.#1081
-
reporter Hallo Konstantin,
Issue#1081 bezieht sich auf das Thema “Masterportal-Login fehlerhaft” und ist nicht von mir.
Hatte da - hoffentlich - nix doppelt gemeldet.
VG
Dietmar
-
Hallo Dietmar,
nein keine Angst, alles in Ordnung :)
Mir war nur bei meiner Suche im Code aufgefallen, dass ein Kollege, der demnächst wieder da ist, vielleicht mehr weiß.
Aktuell wirkt es so als hätte möglicherweise eine Lösung eines anderen Problems zu diesem Issue hier geführt. Ich würde da gerne die Meinung des Kollegen abwarten.
VG
Konstantin
-
Hallo Konstantin, bin zurück, sehe ich mir jetzt an.
Hallo Dietmar,
diese Anpassung mit den Blob-URLs wurde eingeführt, damit man beim Aufruf der WMS-Dienste zusätzliche Header übergeben kann (das geht mit reinen img-Tags nicht). Ich denke, dieses Ticket kann gelöst werden, indem bei dem fetch-Aufruf
{ credentials: 'include' }
gesetzt wird, falls der Layer isSecured gesetzt hat (ähnlich passiert das ja bspw. insrc/api/wmsGetFeatureInfo.js
für die GFI-Requests).Du kannst gerne schon einmal testen, ob es für dich das Problem lösen würde, wenn die zitierte Zeile stattdessen
const response = await fetch(src, { credentials: 'include' }),
lautet. Ich werde das noch weiter prüfen und dann die nötigen Änderungen umsetzen.Viele Grüße
Hendrik -
reporter Hallo Hendrik,
das Problem bleibt bestehen:
Access to fetch at 'https://geodaten.metropoleruhr.de/spw2?REQUEST=GetMap&SERVICE=WMS&VERSION=1.3.0&FORMAT=image%2Fjpeg&STYLES=&TRANSPARENT=false&CACHEID=467809&LAYERS=spw2_light&SINGLETILE=false&WIDTH=512&HEIGHT=512&CRS=EPSG%3A25832&BBOX=347973.3845397057%2C5632893.428430882%2C361520.0438911763%2C5646440.087782353' from origin 'https://koelngis-entw.verwaltung.stadtkoeln.de' has been blocked by CORS policy: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. masterportal.js:170
Uncaught (in promise) TypeError: Failed to fetch at c.<anonymous> (masterportal.js:170:11819) at Generator.next (<anonymous>) at masterportal.js:170:11023 at new Promise (<anonymous>) at f (masterportal.js:170:10843) at c.b [as tileLoadFunction_] (masterportal.js:170:11781) at c.load (masterportal.js:51:139847) at f.loadMoreTiles (masterportal.js:167:91433) at k.handlePostRender (masterportal.js:1065:22088) at masterportal.js:1065:28666
VG
Dietmar
-
Hallo Dietmar,
sind denn die CORS-Header des Dienstes korrekt gesetzt?
Die Masterportal-Doku verlangt ja für secure-Dienste, dass (1)
Access-Control-Allow-Credentials: true
gesetzt ist und (2)Access-Control-Allow-Origin: PORTAL-URL
und nicht nurAccess-Control-Allow-Origin: *
. (services.json - WMSLayer.isSecured) Die Fehlermeldung klingt für mich zunächst danach, als wäre (2) nicht erfüllt.Viele Grüße
Hendrik -
Hallo Herr Stolz,
ich schaue mir den Pull Request zu diesem Thema an.
Leider gibt es in der Bibliothek ol-cesium (olcs), die wir für die 3D-Darstellung nutzen einen Bug, bei der custom imageLoadFunction im WMS und der Layer wird in 3D nicht dargestellt. Siehe https://github.com/openlayers/ol-cesium/issues/666
Wie dringend ist Ihr Problem und nutzen Sie 3D?
Können wir mit der Implementierung warten bis der Bug gefixt ist?
Viele Grüße
Inka Dudek
-
reporter Hallo,
hat keinerlei Eile.
Wir nutzen 3D via Cesium.js.
Danke
Dietmar Stolz
-
Hallo Dietmar,
das Problem sollte ab der Version 2.45.0 behoben sein. Sollte das Problem weiterhin auftreten, bitte ich um Rückmeldung.
Viele Grüße
Hendrik - Log in to comment