2017-02-09 5 views
1

Wenn wir eine Verbindung zu einem MarkLogic-REST-Endpunkt mithilfe einer AJAX-Anforderung von einem anderen Host oder Port herstellen möchten, habe ich Recht, dass MarkLogic das Hinzufügen von Headern zu den integrierten REST-Endpunkten nicht gestattet, um CORS zu vermeiden Problem?MarkLogic CORS-Header

Ich glaube, ich kann dieses Problem umgehen, indem sie ein XQuery-Skript und diese verbindet - und das Hinzufügen der folgenden an den XQuery-Skript:

xdmp:add-response-header("Access-Control-Allow-Origin", "*"); 
xdmp:add-response-header("Access-Control-Allow-Headers", "origin, x-requested-with, content-type"); 

So zum Beispiel Anstatt eine Verbindung zum Endpunkt "v1/documents? uri =" herzustellen, konnte ich mich einfach mit einem Skript "documents.xqy? uri =" verbinden, das die gleiche Funktionalität bietet. Gibt es einen Nachteil für diesen Ansatz? Gibt es einen besseren Weg, damit umzugehen?

Ich stelle fest, dass eine weitere Option in der Vergangenheit gegeben hat einen Reverse-Proxy zu verwenden, aber ich nehme an, dies ist un-nötig der Ansatz oben gegeben?

Danke!

Antwort

2

Wenn Sie benutzerdefinierte XQuery Endpunkte bauen stattdessen die REST-API zu verwenden, dann ja, können Sie Response-Header gesetzt, und Sie sollten in Ordnung sein. Der einzige Nachteil wäre, dass die Out-of-the-Box-Funktionalität der REST-API verloren geht.

Ein weiterer Ansatz ist es, eine mittlere Ebene zwischen dem clientseitige JavaScript und Marklogic zu verwenden und das CORS Problem dort zu behandeln.

Was Sie nicht tun möchten, ist Ihre client-side JavaScript talk directly to the REST API - das ist irgendwie wie eine öffentlich verfügbare ODBC-Verbindung. (Es ist in Ordnung, dass für eine Proof-of-Concept zu tun, aber nicht eine gute Idee für die Produktion.)

+0

ich zweiten Dave Behauptung. Zu zitieren seine feinen Artikel (verknüpfen in seiner Antwort), die ausführlicher mit dem Thema befaßt: „Der Marklogic-REST-API mit einer dreischichtigen Architektur im Verstand errichtet wurde, wo die mittlere Ebene der Geschäftslogik gilt, um sicherzustellen, dass nur korrekte Anfragen durchkommen zu die REST-API. " Setzen Sie nur Geschäftslogik-definierte Endpunkte in öffentlichen Netzwerken und nicht die granularen und leistungsstarken REST-API-Endpunkte zur Verfügung. –

+0

Danke! Dies ist für die Verwendung in einem privaten Netzwerk mit LDAP-Authentifizierung mit Marklogic. Sind die in Daves Artikel dargestellten Bedenken in diesem Anwendungsfall weniger bedenklich? Auch weiß ich, eine Option um die CORS Ausgabe zu erhalten, ist das REST-API zu erweitern, so dass die entsprechenden Header hinzugefügt werden können. Der Ansatz, den wir verwenden, ist, wie bereits erwähnt, die Verbindung mit xquery-Skripten und das Hinzufügen der Header dort. Besteht ein Nachteil darin, die REST-API zu erweitern, oder hängt dies nur vom Anwendungsfall ab? – Robert

+0

Die Verwendung in einem privaten Netzwerk verringert die Anzahl der Personen, die versuchen könnten, über ihre Berechtigung hinaus zu handeln, ändert jedoch nicht das Problem selbst. Wenn Sie sich für eine App mit zwei Ebenen (eine vollkommen vernünftige Architektur) engagieren, sollten Sie Ihre eigenen Endpunkte rollen, um eine genaue Kontrolle darüber zu erhalten, was Personen tun können. –